From: <ave...@us...> - 2007-03-03 13:22:07
|
Revision: 4521 http://gemrb.svn.sourceforge.net/gemrb/?rev=4521&view=rev Author: avenger_teambg Date: 2007-03-03 05:22:00 -0800 (Sat, 03 Mar 2007) Log Message: ----------- runeventhandler got a second parameter (error if function doesn't exist) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-02 21:57:36 UTC (rev 4520) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-03 13:22:00 UTC (rev 4521) @@ -1203,9 +1203,9 @@ PyDoc_STRVAR( GemRB_TextAreaAppend__doc, "TextAreaAppend(WindowIndex, ControlIndex, String|Strref [, Row[, Flag]]) => int\n\n" -"Appends the Text to the TextArea Control in the Window.\n" -"If Row is given then it will insert the text after that row\n" -"If Flag is given, then it will use that value as a GetString flag"); +"Appends the Text to the TextArea Control in the Window. " +"If Row is given then it will insert the text after that row. " +"If Flag is given, then it will use that value as a GetString flag."); static PyObject* GemRB_TextAreaAppend(PyObject * /*self*/, PyObject* args) { @@ -1422,7 +1422,7 @@ PyDoc_STRVAR( GemRB_ShowModal__doc, "ShowModal(WindowIndex, [Shadow=MODAL_SHADOW_NONE])\n\n" -"Show a Window on Screen setting the Modal Status." +"Show a Window on Screen setting the Modal Status. " "If Shadow is MODAL_SHADOW_GRAY, other windows are grayed. " "If Shadow is MODAL_SHADOW_BLACK, they are blacked out." ); @@ -4587,7 +4587,7 @@ PyDoc_STRVAR( GemRB_EnterStore__doc, "EnterStore(STOResRef)\n\n" -"Loads the store referenced." ); +"Loads the store referenced and opens the store window." ); static PyObject* GemRB_EnterStore(PyObject * /*self*/, PyObject* args) { @@ -4596,8 +4596,15 @@ if (!PyArg_ParseTuple( args, "s", &StoreResRef )) { return AttributeError( GemRB_EnterStore__doc ); } + + if (core->GetCurrentStore()) { + return RuntimeError( "Already in a store!\n"); + } + core->SetCurrentStore( StoreResRef, NULL ); + //the error flag is not optional, we should open a store now + core->GetGUIScriptEngine()->RunFunction( "OpenStoreWindow", true); Py_INCREF( Py_None ); return Py_None; } @@ -4850,12 +4857,22 @@ "GetStore() => dictionary\n\n" "Returns relevant data of the current store." ); -static int storebuttons[6][4]={ +#define STORETYPE_COUNT 7 +static int storebuttons[STORETYPE_COUNT][4]={ +//store {STA_BUYSELL,STA_IDENTIFY|STA_OPTIONAL,STA_STEAL|STA_OPTIONAL,STA_CURE|STA_OPTIONAL}, +//tavern {STA_DRINK,STA_BUYSELL|STA_OPTIONAL,STA_IDENTIFY|STA_OPTIONAL,STA_STEAL|STA_OPTIONAL}, +//inn {STA_ROOMRENT,STA_BUYSELL|STA_OPTIONAL,STA_DRINK|STA_OPTIONAL,STA_STEAL|STA_OPTIONAL}, +//temple {STA_CURE, STA_DONATE|STA_OPTIONAL,STA_BUYSELL|STA_OPTIONAL,STA_IDENTIFY|STA_OPTIONAL}, -{STA_BUYSELL,-1,-1,-1,},{STA_BUYSELL,-1,-1,-1} }; +//iwd container +{STA_BUYSELL,-1,-1,-1,}, +//no need to steal from your own container (original engine had STEAL instead of DRINK) +{STA_BUYSELL,STA_IDENTIFY|STA_OPTIONAL,STA_DRINK|STA_OPTIONAL,STA_CURE|STA_OPTIONAL}, +//gemrb specific store type: (temple 2), added steal, removed identify +{STA_BUYSELL,STA_STEAL|STA_OPTIONAL,STA_DONATE|STA_OPTIONAL,STA_CURE|STA_OPTIONAL} }; //buy/sell, identify, steal, cure, donate, drink, rent static int storebits[7]={IE_STORE_BUY|IE_STORE_SELL,IE_STORE_ID,IE_STORE_STEAL, @@ -4871,6 +4888,9 @@ if (!store) { return RuntimeError("No current store!"); } + if (store->Type>STORETYPE_COUNT-1) { + store->Type=STORETYPE_COUNT-1; + } PyObject* dict = PyDict_New(); PyDict_SetItemString(dict, "StoreType", PyInt_FromLong( store->Type )); PyDict_SetItemString(dict, "StoreName", PyInt_FromLong( store->StoreName )); @@ -5372,7 +5392,7 @@ PyDoc_STRVAR( GemRB_ExecuteString__doc, "ExecuteString(String[,PC])\n\n" -"Executes an In-Game Script Action in the current Area Script Context." +"Executes an In-Game Script Action in the current Area Script Context. " "If a number was given, it will execute the action in the numbered PC's context." ); static PyObject* GemRB_ExecuteString(PyObject * /*self*/, PyObject* args) @@ -5398,17 +5418,19 @@ } PyDoc_STRVAR( GemRB_RunEventHandler__doc, -"RunEventHandler(String)\n\n" -"Executes a GUIScript event handler function named String." ); +"RunEventHandler(String[,error])\n\n" +"Executes a GUIScript event handler function named String. " +"If error set to nonzero, then a missing handler will cause error." ); static PyObject* GemRB_RunEventHandler(PyObject * /*self*/, PyObject* args) { char* String; + int error = 0; - if (!PyArg_ParseTuple( args, "s", &String )) { + if (!PyArg_ParseTuple( args, "s|i", &String, error )) { return AttributeError( GemRB_RunEventHandler__doc ); } - core->GetGUIScriptEngine()->RunFunction( String ); + core->GetGUIScriptEngine()->RunFunction( String, error ); Py_INCREF( Py_None ); return Py_None; } @@ -5613,7 +5635,7 @@ PyDoc_STRVAR( GemRB_GetMemorizedSpellsCount__doc, "GetMemorizedSpellsCount(PartyID, SpellType[, Level])=>int\n\n" -"Returns number of spells of given type and level in PartyID's memory." +"Returns number of spells of given type and level in PartyID's memory. " "If level is omitted then it returns the number of distinct spells memorised." ); static PyObject* GemRB_GetMemorizedSpellsCount(PyObject * /*self*/, PyObject* args) @@ -6142,7 +6164,7 @@ core->GetSoundMgr()->Play(Sound); } core->DragItem (si, ResRef); - //this is PST specific + //this is PST specific, so the error flag is false core->GetGUIScriptEngine()->RunFunction("UpdateAnimation", false); Py_INCREF( Py_None ); return Py_None; @@ -6283,7 +6305,7 @@ if (Sound[0]) { core->GetSoundMgr()->Play(Sound); } - //this is PST specific, change animation + //this is PST specific, changes animation core->GetGUIScriptEngine()->RunFunction("UpdateAnimation", false); return PyInt_FromLong( res ); } @@ -7448,7 +7470,7 @@ PyDoc_STRVAR( GemRB_UseItem__doc, "UseItem(actor, slot[, item])\n\n" "Makes the actor try to use an item. " -"If slot is negative, then item is the index of the item functionality in the use item list." +"If slot is negative, then item is the index of the item functionality in the use item list. " "If slot is non-negative, then item is the quick item or weapon in slot."); static PyObject* GemRB_UseItem(PyObject * /*self*/, PyObject* args) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-03-10 23:39:06
|
Revision: 4538 http://gemrb.svn.sourceforge.net/gemrb/?rev=4538&view=rev Author: avenger_teambg Date: 2007-03-10 15:39:05 -0800 (Sat, 10 Mar 2007) Log Message: ----------- using the correct icon for equipments in SetupEquipmentIcons Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-10 23:31:31 UTC (rev 4537) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-10 23:39:05 UTC (rev 4538) @@ -6898,7 +6898,7 @@ Sprite2D *Picture = NULL; if (item->UseIcon[0]) { - Picture = core->GetBAMSprite(item->UseIcon, 0, 0); + Picture = core->GetBAMSprite(item->UseIcon, 1, 0); } if (!Picture) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-03-11 14:44:58
|
Revision: 4543 http://gemrb.svn.sourceforge.net/gemrb/?rev=4543&view=rev Author: avenger_teambg Date: 2007-03-11 07:44:54 -0700 (Sun, 11 Mar 2007) Log Message: ----------- the font in the action button will now be aligned correctly Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-11 12:58:14 UTC (rev 4542) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-03-11 14:44:54 UTC (rev 4543) @@ -4492,7 +4492,7 @@ return core->GetBAMSprite(item->ItemIcon, -1, which); } -static void SetItemText(int wi, int ci, int charges) +static void SetItemText(int wi, int ci, int charges, bool oneisnone) { Button* btn = (Button *) GetControl( wi, ci, IE_GUI_BUTTON ); if (!btn) { @@ -4500,7 +4500,7 @@ } char tmp[10]; - if (charges) { + if (charges && (charges>1 || !oneisnone) ) { sprintf(tmp,"%d",charges); } else { tmp[0]=0; @@ -6797,7 +6797,7 @@ SetButtonCycle(bam, btn, (char) row.bytes[1], IE_GUI_BUTTON_PRESSED); SetButtonCycle(bam, btn, (char) row.bytes[2], IE_GUI_BUTTON_SELECTED); SetButtonCycle(bam, btn, (char) row.bytes[3], IE_GUI_BUTTON_DISABLED); - btn->SetFlags( IE_GUI_BUTTON_NORMAL, BM_SET ); + btn->SetFlags( IE_GUI_BUTTON_NO_IMAGE|IE_GUI_BUTTON_PICTURE, BM_NAND ); ieVariable Event; snprintf(Event,sizeof(Event)-1, "Action%sPressed", GUIEvent[Index]); btn->SetEvent( IE_GUI_BUTTON_ON_PRESS, Event ); @@ -7013,7 +7013,6 @@ SetButtonCycle(bam, btn, 2, IE_GUI_BUTTON_SELECTED); SetButtonCycle(bam, btn, 3, IE_GUI_BUTTON_DISABLED); btn->SetPicture( Picture ); - //btn->SetFlags(IE_GUI_BUTTON_PICTURE|IE_GUI_BUTTON_ALIGN_RIGHT, BM_SET); btn->SetFlags(IE_GUI_BUTTON_PICTURE|IE_GUI_BUTTON_ALIGN_BOTTOM|IE_GUI_BUTTON_ALIGN_RIGHT, BM_SET); btn->SetTooltip(core->GetString(spell->strref,0)); char usagestr[10]; @@ -7080,11 +7079,13 @@ } else { action&=31; } - PyObject *ret = SetActionIcon(wi,ci,action,i+1); Button * btn = (Button *) GetControl(wi,ci,IE_GUI_BUTTON); if (!btn) { return NULL; } + btn->SetFlags(IE_GUI_BUTTON_NO_IMAGE|IE_GUI_BUTTON_ALIGN_BOTTOM|IE_GUI_BUTTON_ALIGN_RIGHT, BM_SET); + SetItemText(wi, ci, 0, false); + PyObject *ret = SetActionIcon(wi,ci,action,i+1); int state = IE_GUI_BUTTON_UNPRESSED; ieDword modalstate = actor->ModalState; @@ -7195,7 +7196,7 @@ } } SetItemIcon(wi, ci, item->ItemResRef,mode,(item->Flags&IE_INV_ITEM_IDENTIFIED)?2:1, i+1, Item2ResRef); - SetItemText(wi, ci, item->Usages[actor->PCStats->QuickWeaponHeaders[action-ACT_WEAPON1]]); + SetItemText(wi, ci, item->Usages[actor->PCStats->QuickWeaponHeaders[action-ACT_WEAPON1]], true); if (usedslot == slot) { btn->EnableBorder(0, true); if (core->GetGameControl()->target_mode&TARGET_MODE_ATTACK) { @@ -7245,7 +7246,7 @@ CREItem *item = actor->inventory.GetSlotItem(slot); if (item) { SetItemIcon(wi, ci, item->ItemResRef,0,(item->Flags&IE_INV_ITEM_IDENTIFIED)?2:1, i+1, 0); - SetItemText(wi, ci, item->Usages[actor->PCStats->QuickItemHeaders[tmp]]); + SetItemText(wi, ci, item->Usages[actor->PCStats->QuickItemHeaders[tmp]], false); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-15 12:00:06
|
Revision: 4597 http://gemrb.svn.sourceforge.net/gemrb/?rev=4597&view=rev Author: avenger_teambg Date: 2007-04-15 05:00:05 -0700 (Sun, 15 Apr 2007) Log Message: ----------- handle the resellable (displayable in shop) flag - item could be sold but won't appear in shop Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-15 09:10:02 UTC (rev 4596) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-15 12:00:05 UTC (rev 4597) @@ -5162,7 +5162,7 @@ } //well, it shouldn't be sold at all, but if it is here //it will vanish!!! - if (!si->Expired) { + if (!si->Expired && (si->Flags& IE_INV_ITEM_RESELLABLE)) { si->Flags &= ~IE_INV_ITEM_SELECTED; store->AddItem( si ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-17 21:22:34
|
Revision: 4601 http://gemrb.svn.sourceforge.net/gemrb/?rev=4601&view=rev Author: avenger_teambg Date: 2007-04-17 14:22:28 -0700 (Tue, 17 Apr 2007) Log Message: ----------- improved SpellCast guiscript command Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-15 21:37:07 UTC (rev 4600) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-17 21:22:28 UTC (rev 4601) @@ -7464,6 +7464,26 @@ printf("Spellname: %s\n", core->GetString(spelldata.strref)); printf("Target: %d\n", spelldata.Target); printf("Range: %d\n", spelldata.Range); + switch (spelldata.Target) { + case TARGET_SELF: + actor->CastSpell(spelldata.spellname, actor, true); + break; + case TARGET_NONE: + actor->CastSpell(spelldata.spellname, NULL, true); + break; + case TARGET_AREA: + core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.headerindex, actor, GA_POINT, spelldata.TargetNumber); + break; + case TARGET_CREA: + core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.headerindex, actor, GA_NO_DEAD, spelldata.TargetNumber); + break; + case TARGET_DEAD: + core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.headerindex, actor, 0, spelldata.TargetNumber); + break; + default: + printMessage("GUIScript", "Unhandled target type!", LIGHT_RED ); + break; + } Py_INCREF( Py_None ); return Py_None; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-22 17:30:06
|
Revision: 4608 http://gemrb.svn.sourceforge.net/gemrb/?rev=4608&view=rev Author: avenger_teambg Date: 2007-04-22 10:30:06 -0700 (Sun, 22 Apr 2007) Log Message: ----------- fixed GetMemorizedSpellsCount to work as the specification Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-22 17:11:30 UTC (rev 4607) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-22 17:30:06 UTC (rev 4608) @@ -5666,7 +5666,7 @@ } if (Level<0) { - return PyInt_FromLong( actor->spellbook.GetMemorizedSpellsCount( SpellType ) ); + return PyInt_FromLong( actor->spellbook.GetSpellInfoSize( SpellType ) ); } else { return PyInt_FromLong( actor->spellbook.GetMemorizedSpellsCount( SpellType, Level ) ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-24 16:34:58
|
Revision: 4611 http://gemrb.svn.sourceforge.net/gemrb/?rev=4611&view=rev Author: avenger_teambg Date: 2007-04-24 09:34:56 -0700 (Tue, 24 Apr 2007) Log Message: ----------- target_self done correctly Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-22 17:49:48 UTC (rev 4610) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-24 16:34:56 UTC (rev 4611) @@ -7477,26 +7477,33 @@ actor->spellbook.GetSpellInfo(&spelldata, type, spell, 1); printf("Cast spell: %s\n", spelldata.spellname); - printf("Extended header: %d\n", spelldata.headerindex); + printf("Slot: %d\n", spelldata.slot); + printf("Type: %d\n", spelldata.type); printf("Spellname: %s\n", core->GetString(spelldata.strref)); printf("Target: %d\n", spelldata.Target); printf("Range: %d\n", spelldata.Range); + GameControl *gc = core->GetGameControl(); switch (spelldata.Target) { case TARGET_SELF: - actor->CastSpell(spelldata.spellname, actor, true); + gc->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, GA_NO_DEAD, spelldata.TargetNumber); + gc->TryToCast(actor, actor); break; case TARGET_NONE: + //this is always instant casting actor->CastSpell(spelldata.spellname, NULL, true); break; case TARGET_AREA: - core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, GA_POINT, spelldata.TargetNumber); + gc->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, GA_POINT, spelldata.TargetNumber); break; case TARGET_CREA: - core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, GA_NO_DEAD, spelldata.TargetNumber); + gc->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, GA_NO_DEAD, spelldata.TargetNumber); break; case TARGET_DEAD: - core->GetGameControl()->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, 0, spelldata.TargetNumber); + gc->SetupCasting(spelldata.type, spelldata.level, spelldata.slot, actor, 0, spelldata.TargetNumber); break; + case TARGET_INV: + //bring up inventory in the end??? + //break; default: printMessage("GUIScript", "Unhandled target type!", LIGHT_RED ); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-28 13:32:52
|
Revision: 4616 http://gemrb.svn.sourceforge.net/gemrb/?rev=4616&view=rev Author: avenger_teambg Date: 2007-04-28 06:32:52 -0700 (Sat, 28 Apr 2007) Log Message: ----------- a minor fix Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-28 13:24:46 UTC (rev 4615) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-28 13:32:52 UTC (rev 4616) @@ -5363,7 +5363,7 @@ return 0; } int ret = spell->SpellDescIdentified; - core->FreeSpell(spell, CureResRef, 0); + core->FreeSpell(spell, CureResRef, false); return ret; } for (i=0;i<StoreSpellsCount;i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-04-29 12:28:24
|
Revision: 4620 http://gemrb.svn.sourceforge.net/gemrb/?rev=4620&view=rev Author: avenger_teambg Date: 2007-04-29 05:28:23 -0700 (Sun, 29 Apr 2007) Log Message: ----------- fixed a string leak and some bad frees (which can break windows version) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-29 11:24:49 UTC (rev 4619) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-04-29 12:28:23 UTC (rev 4620) @@ -3293,9 +3293,9 @@ else c=core->GetString(10700); } retval = PyString_FromFormat("%s%s%s",a?a:"",b?b:"",c?c:""); - if (a) free(a); - if (b) free(b); - if (c) free(c); + core->FreeString(a); + core->FreeString(b); + core->FreeString(c); return retval; } @@ -4564,6 +4564,7 @@ if (tooltip) { //later getitemname could also return tooltip stuff char *str = core->GetString(item->GetItemName(tooltip==2),0); + //this will free str, no need of freeing it SetFunctionTooltip(wi, ci, str, Function); } @@ -6792,7 +6793,8 @@ snprintf(Event,sizeof(Event)-1, "Action%sPressed", GUIEvent[Index]); btn->SetEvent( IE_GUI_BUTTON_ON_PRESS, Event ); char *txt = core->GetString( GUITooltip[Index] ); - SetFunctionTooltip(WindowIndex, ControlIndex, txt, Function);//will free txt + //will free txt + SetFunctionTooltip(WindowIndex, ControlIndex, txt, Function); //no incref return Py_None; } @@ -7479,7 +7481,9 @@ printf("Cast spell: %s\n", spelldata.spellname); printf("Slot: %d\n", spelldata.slot); printf("Type: %d\n", spelldata.type); - printf("Spellname: %s\n", core->GetString(spelldata.strref)); + char *tmp = core->GetString(spelldata.strref); + printf("Spellname: %s\n", tmp); + core->FreeString(tmp); printf("Target: %d\n", spelldata.Target); printf("Range: %d\n", spelldata.Range); GameControl *gc = core->GetGameControl(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-05-11 22:44:15
|
Revision: 4652 http://gemrb.svn.sourceforge.net/gemrb/?rev=4652&view=rev Author: avenger_teambg Date: 2007-05-11 15:44:12 -0700 (Fri, 11 May 2007) Log Message: ----------- fixed some leak Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-05-11 22:17:53 UTC (rev 4651) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-05-11 22:44:12 UTC (rev 4652) @@ -201,12 +201,12 @@ } else { sprintf(txt2,"F%d - %s",ControlIndex+1,txt); } - free(txt); + core->FreeString(txt); core->SetTooltip((ieWord) WindowIndex, (ieWord) ControlIndex, txt2); free (txt2); return; } - free(txt); + core->FreeString(txt); } core->SetTooltip((ieWord) WindowIndex, (ieWord) ControlIndex, ""); } @@ -6945,7 +6945,9 @@ btn->SetFlags(IE_GUI_BUTTON_PICTURE|IE_GUI_BUTTON_ALIGN_BOTTOM|IE_GUI_BUTTON_ALIGN_RIGHT, BM_SET); int tip = core->GetItemTooltip(item->itemname, item->headerindex); if (tip>0) { - btn->SetTooltip(core->GetString((ieDword) tip,0)); + char *tmp = core->GetString((ieStrRef) tip,0); + btn->SetTooltip(tmp); + core->FreeString(tmp); } else { btn->SetTooltip(NULL); } @@ -7051,7 +7053,9 @@ SetButtonCycle(bam, btn, 3, IE_GUI_BUTTON_DISABLED); btn->SetPicture( Picture ); btn->SetFlags(IE_GUI_BUTTON_PICTURE|IE_GUI_BUTTON_ALIGN_BOTTOM|IE_GUI_BUTTON_ALIGN_RIGHT, BM_SET); - btn->SetTooltip(core->GetString(spell->strref,0)); + char *tmp = core->GetString(spell->strref,0); + btn->SetTooltip(tmp); + core->FreeString(tmp); char usagestr[10]; if (spell->count>0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-05-12 17:57:56
|
Revision: 4653 http://gemrb.svn.sourceforge.net/gemrb/?rev=4653&view=rev Author: avenger_teambg Date: 2007-05-12 10:57:54 -0700 (Sat, 12 May 2007) Log Message: ----------- made a module local variable static Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-05-11 22:44:12 UTC (rev 4652) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-05-12 17:57:54 UTC (rev 4653) @@ -114,7 +114,7 @@ static int CHUWidth = 0; static int CHUHeight = 0; -EffectRef learn_spell_ref={"Spell:Learn",NULL,-1}; +static EffectRef fx_learn_spell_ref={"Spell:Learn",NULL,-1}; // Like PyString_FromString(), but for ResRef inline PyObject* PyString_FromResRef(char* ResRef) @@ -6079,8 +6079,8 @@ f = eh->features; //+0 //normally the learn spell opcode is 147 - EffectQueue::ResolveEffect(learn_spell_ref); - if (f->Opcode!=(ieDword) learn_spell_ref.EffText) { + EffectQueue::ResolveEffect(fx_learn_spell_ref); + if (f->Opcode!=(ieDword) fx_learn_spell_ref.EffText) { goto not_a_scroll; } //maybe further checks for school exclusion? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-08-07 20:06:36
|
Revision: 4747 http://gemrb.svn.sourceforge.net/gemrb/?rev=4747&view=rev Author: avenger_teambg Date: 2007-08-07 13:06:34 -0700 (Tue, 07 Aug 2007) Log Message: ----------- gettablevalue can now translate stat symbols to numeric values Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-08-07 20:05:10 UTC (rev 4746) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-08-07 20:06:34 UTC (rev 4747) @@ -256,6 +256,26 @@ return actor->StrRefs[Str]; } +//returns a numeric value associated with a stat name (symbol) from stats.ids +static inline ieDword TranslateStat(const char *stat_name) +{ + int symbol = core->LoadSymbol( "stats" ); + SymbolMgr *sym = core->GetSymbol( symbol ); + ieDword stat = (ieDword) sym->GetValue( stat_name ); + if (!stat) { + printMessage("GUIScript"," ",YELLOW); + printf("Cannot translate symbol: %s\n", stat_name); + } + return stat; +} + +static inline bool CheckStat(Actor * actor, const char *stat_name, ieDword value) +{ + ieDword stat = TranslateStat(stat_name); + //some stats should check for exact value + return actor->GetBase(stat)>=value; +} + static int GetCreatureStat(unsigned int Slot, unsigned int StatID, int Mod) { Actor * actor = core->GetGame()->FindPC(Slot); @@ -843,7 +863,8 @@ PyDoc_STRVAR( GemRB_GetTableValue__doc, "GetTableValue(TableIndex, RowIndex/RowString, ColIndex/ColString, type) => value\n\n" -"Returns a field of a 2DA Table. If Type is omitted the return type is the autodetected, otherwise 1 means integer, 0 means string." ); +"Returns a field of a 2DA Table. If Type is omitted the return type is the autodetected, " +"otherwise 0 means string, 1 means integer, 2 means stat symbol translation." ); static PyObject* GemRB_GetTableValue(PyObject * /*self*/, PyObject* args) { @@ -912,6 +933,10 @@ if (valid_number( ret, val ) || (which==1) ) { return PyInt_FromLong( val ); } + if (which==2) { + val = TranslateStat(ret); + return PyInt_FromLong( val ); + } return PyString_FromString( ret ); } @@ -6677,16 +6702,6 @@ return Py_None; } -static bool CheckStat(Actor * actor, const char *stat_name, ieDword value) -{ - int symbol = core->LoadSymbol( "stats" ); - SymbolMgr *sym = core->GetSymbol( symbol ); - long stat = sym->GetValue( stat_name ); - - //some stats should check for exact value - return actor->GetBase(stat)>=value; -} - PyDoc_STRVAR( GemRB_CheckFeatCondition__doc, "CheckFeatCondition(partyslot, a_stat, a_value, b_stat, b_value, c_stat, c_value, d_stat, d_value)==> bool\n\n" "Checks if actor in partyslot is eligible for a feat, the formula is: (stat[a]>=a or stat[b]>=b) and (stat[c]>=c or stat[d]>=d)."); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-08-09 21:06:40
|
Revision: 4754 http://gemrb.svn.sourceforge.net/gemrb/?rev=4754&view=rev Author: avenger_teambg Date: 2007-08-09 14:06:42 -0700 (Thu, 09 Aug 2007) Log Message: ----------- fixed an uninitialized memory Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-08-08 19:35:39 UTC (rev 4753) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-08-09 21:06:42 UTC (rev 4754) @@ -6771,7 +6771,7 @@ static PyObject* GemRB_GetAbilityBonus(PyObject * /*self*/, PyObject* args) { - int stat, column, value, ex; + int stat, column, value, ex = 0; int ret; if (!PyArg_ParseTuple( args, "iii|i", &stat, &column, &value, &ex)) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-12-06 21:29:27
|
Revision: 4875 http://gemrb.svn.sourceforge.net/gemrb/?rev=4875&view=rev Author: avenger_teambg Date: 2007-12-06 13:29:23 -0800 (Thu, 06 Dec 2007) Log Message: ----------- improved GetSpell with spell school/secondary type Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-06 21:09:46 UTC (rev 4874) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-06 21:29:23 UTC (rev 4875) @@ -5872,6 +5872,8 @@ PyDict_SetItemString(dict, "SpellbookIcon", PyString_FromResRef (spell->SpellbookIcon)); PyDict_SetItemString(dict, "SpellExclusion", PyInt_FromLong (spell->ExclusionSchool)); //this will list school exclusions and alignment PyDict_SetItemString(dict, "SpellDivine", PyInt_FromLong (spell->PriestType)); //this will tell apart a priest spell from a druid spell + PyDict_SetItemString(dict, "SpellSchool", PyInt_FromLong (spell->PrimaryType)); + PyDict_SetItemString(dict, "SpellType", PyInt_FromLong (spell->SecondaryType)); core->FreeSpell( spell, ResRef, false ); return dict; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-12-08 11:07:21
|
Revision: 4887 http://gemrb.svn.sourceforge.net/gemrb/?rev=4887&view=rev Author: avenger_teambg Date: 2007-12-08 03:07:20 -0800 (Sat, 08 Dec 2007) Log Message: ----------- reset the cursor for TARGET_NONE spelltype Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-08 11:05:56 UTC (rev 4886) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-08 11:07:20 UTC (rev 4887) @@ -7669,6 +7669,8 @@ gc->TryToCast(actor, actor); break; case TARGET_NONE: + //reset the cursor + gc->target_mode = TARGET_MODE_NONE; //this is always instant casting core->ApplySpell(spelldata.spellname, actor, actor, 0); break; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2007-12-30 13:10:27
|
Revision: 4953 http://gemrb.svn.sourceforge.net/gemrb/?rev=4953&view=rev Author: lynxlupodian Date: 2007-12-30 05:09:44 -0800 (Sun, 30 Dec 2007) Log Message: ----------- properly add spaces in the game time in GetGameDate Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-30 12:40:10 UTC (rev 4952) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-30 13:09:44 UTC (rev 4953) @@ -3366,7 +3366,11 @@ if (hours==1) c=core->GetString(10701); else c=core->GetString(10700); } - retval = PyString_FromFormat("%s%s%s",a?a:"",b?b:"",c?c:""); + if (b) + retval = PyString_FromFormat("%s %s %s",a,b,c?c:""); + else { + retval = PyString_FromFormat("%s%s",a?a:"",c?c:""); + } core->FreeString(a); core->FreeString(b); core->FreeString(c); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2007-12-31 18:58:09
|
Revision: 4963 http://gemrb.svn.sourceforge.net/gemrb/?rev=4963&view=rev Author: lynxlupodian Date: 2007-12-31 10:57:43 -0800 (Mon, 31 Dec 2007) Log Message: ----------- GemRB_SetupSpellIcons: disable spells that should be cast from the inventory When clicking on the button, it calls UpdateActionsWindow, so the underlying attack button doesn't receive the click Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-31 13:58:42 UTC (rev 4962) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-31 18:57:43 UTC (rev 4963) @@ -7161,12 +7161,20 @@ for (i=0;i<GUIBT_COUNT-(more?2:0);i++) { int ci = core->GetControl(wi, i+(more?1:0) ); Button* btn = (Button *) GetControl( wi, ci, IE_GUI_BUTTON ); - btn->SetEvent(IE_GUI_BUTTON_ON_PRESS,"SpellPressed"); - btn->SetState(IE_GUI_BUTTON_UNPRESSED); strcpy(btn->VarName,"Spell"); btn->Value = Start+i; SpellExtHeader *spell = SpellArray+i; + // disable spells that should be cast from the inventory + // Identify is misclassified and has Target 3 (Dead char) + if (spell->Target == 2 || spell->strref == 12040) { + btn->SetState(IE_GUI_BUTTON_DISABLED); + btn->EnableBorder(1, IE_GUI_BUTTON_DISABLED); + btn->SetEvent(IE_GUI_BUTTON_ON_PRESS,"UpdateActionsWindow"); //noop + } else { + btn->SetState(IE_GUI_BUTTON_UNPRESSED); + btn->SetEvent(IE_GUI_BUTTON_ON_PRESS,"SpellPressed"); + } Sprite2D *Picture = NULL; if (spell->MemorisedIcon[0]) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2007-12-31 19:33:58
|
Revision: 4965 http://gemrb.svn.sourceforge.net/gemrb/?rev=4965&view=rev Author: avenger_teambg Date: 2007-12-31 11:33:58 -0800 (Mon, 31 Dec 2007) Log Message: ----------- removed a bleeding hack :) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-31 19:15:26 UTC (rev 4964) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2007-12-31 19:33:58 UTC (rev 4965) @@ -5441,6 +5441,19 @@ } } +int GetSpecialSpell(ieResRef resref) +{ + if (SpecialSpellsCount==-1) { + ReadSpecialSpells(); + } + for (int i=0;i<SpecialSpellsCount;i++) { + if (!strnicmp(resref, SpecialSpells[i].resref, sizeof(ieResRef))) { + return SpecialSpells[i].value; + } + } + return 0; +} + static void ReadUsedItems() { int i; @@ -7167,7 +7180,7 @@ SpellExtHeader *spell = SpellArray+i; // disable spells that should be cast from the inventory // Identify is misclassified and has Target 3 (Dead char) - if (spell->Target == 2 || spell->strref == 12040) { + if (GetSpecialSpell(spell->spellname) ) { btn->SetState(IE_GUI_BUTTON_DISABLED); btn->EnableBorder(1, IE_GUI_BUTTON_DISABLED); btn->SetEvent(IE_GUI_BUTTON_ON_PRESS,"UpdateActionsWindow"); //noop This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-01-19 08:58:05
|
Revision: 4981 http://gemrb.svn.sourceforge.net/gemrb/?rev=4981&view=rev Author: avenger_teambg Date: 2008-01-19 00:58:05 -0800 (Sat, 19 Jan 2008) Log Message: ----------- HasControl guiscript command added Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-01-15 18:16:31 UTC (rev 4980) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-01-19 08:58:05 UTC (rev 4981) @@ -1157,6 +1157,32 @@ return PyInt_FromLong( ret ); } +PyDoc_STRVAR( GemRB_HasControl__doc, +"HasControl(WindowIndex, ControlID[,ControlType]) => bool\n\n" +"Returns true if the control exists." ); + +static PyObject* GemRB_HasControl(PyObject * /*self*/, PyObject* args) +{ + int WindowIndex, ControlID; + int Type = -1; + + if (!PyArg_ParseTuple( args, "ii|i", &WindowIndex, &ControlID, &Type )) { + return AttributeError( GemRB_HasControl__doc ); + } + int ret = core->GetControl( WindowIndex, ControlID ); + if (ret == -1) { + return PyInt_FromLong( 0 ); + } + + if (Type!=-1) { + Control *ctrl = GetControl(WindowIndex, ControlID, -1); + if (ctrl->ControlType!=Type) { + return PyInt_FromLong( 0 ); + } + } + return PyInt_FromLong( 1 ); +} + PyDoc_STRVAR( GemRB_QueryText__doc, "QueryText(WindowIndex, ControlIndex) => string\n\n" "Returns the Text of a TextEdit control." ); @@ -8206,6 +8232,7 @@ METHOD(UnloadSymbol, METH_VARARGS), METHOD(GetSymbolValue, METH_VARARGS), METHOD(GetControl, METH_VARARGS), + METHOD(HasControl, METH_VARARGS), METHOD(SetBufferLength, METH_VARARGS), METHOD(SetText, METH_VARARGS), METHOD(QueryText, METH_VARARGS), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-01-19 20:59:48
|
Revision: 4995 http://gemrb.svn.sourceforge.net/gemrb/?rev=4995&view=rev Author: avenger_teambg Date: 2008-01-19 12:57:52 -0800 (Sat, 19 Jan 2008) Log Message: ----------- reimplemented default resource in SetButtonPicture Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-01-19 20:42:29 UTC (rev 4994) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-01-19 20:57:52 UTC (rev 4995) @@ -2727,6 +2727,17 @@ ImageFactory* fact = ( ImageFactory* ) rm->GetFactoryResource( ResRef, IE_BMP_CLASS_ID, IE_NORMAL ); + //if the resource doesn't exist, but we have a default resource + //use this resource + if (!fact && DefResRef) { + fact = ( ImageFactory* ) + rm->GetFactoryResource( DefResRef, IE_BMP_CLASS_ID, IE_NORMAL ); + } + + if (!fact) { + return NULL; + } + Sprite2D* Picture = fact->GetImage(); if (Picture == NULL) { return NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-02-22 20:52:40
|
Revision: 5067 http://gemrb.svn.sourceforge.net/gemrb/?rev=5067&view=rev Author: avenger_teambg Date: 2008-02-22 12:52:40 -0800 (Fri, 22 Feb 2008) Log Message: ----------- just a typo in a comment Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-02-22 20:26:46 UTC (rev 5066) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-02-22 20:52:40 UTC (rev 5067) @@ -4013,7 +4013,7 @@ } //FIXME:overwriting original slot //is dangerous if the game is already loaded - //maybe the actor should be removed the area first + //maybe the actor should be removed from the area first if (PlayerSlot & 0x8000) { PlayerSlot = game->FindPlayer( Slot ); if (PlayerSlot >= 0) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ave...@us...> - 2008-06-08 19:25:39
|
Revision: 5186 http://gemrb.svn.sourceforge.net/gemrb/?rev=5186&view=rev Author: avenger_teambg Date: 2008-06-08 12:25:44 -0700 (Sun, 08 Jun 2008) Log Message: ----------- CreateItem: create item on ground if slot is random, and inventory is full Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-06-07 14:37:14 UTC (rev 5185) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-06-08 19:25:44 UTC (rev 5186) @@ -286,6 +286,25 @@ return 1; } +/* create an item entry + TODO: this code snippet exists in many copies, maybe consolidate */ +static CREItem *CreateCreItem(const char *ItemResRef, int Charge0, int Charge1, int Charge2) +{ + CREItem *TmpItem = new CREItem(); + strnlwrcpy(TmpItem->ItemResRef, ItemResRef, 8); + TmpItem->Expired=0; + TmpItem->Usages[0]=(ieWord) Charge0; + TmpItem->Usages[1]=(ieWord) Charge1; + TmpItem->Usages[2]=(ieWord) Charge2; + TmpItem->Flags=0; + if (core->ResolveRandomItem(TmpItem) && core->Exists(TmpItem->ItemResRef, IE_ITM_CLASS_ID)) { + return TmpItem; + } + /* item couldn't be resolved */ + delete TmpItem; + return NULL; +} + PyDoc_STRVAR( GemRB_SetInfoTextColor__doc, "SetInfoTextColor(red, green, blue, [alpha])\n\n" "Sets the color of Floating Messages in GameControl." ); @@ -1163,12 +1182,12 @@ static PyObject* GemRB_HasControl(PyObject * /*self*/, PyObject* args) { - int WindowIndex, ControlID; + int WindowIndex, ControlID; int Type = -1; - if (!PyArg_ParseTuple( args, "ii|i", &WindowIndex, &ControlID, &Type )) { - return AttributeError( GemRB_HasControl__doc ); - } + if (!PyArg_ParseTuple( args, "ii|i", &WindowIndex, &ControlID, &Type )) { + return AttributeError( GemRB_HasControl__doc ); + } int ret = core->GetControl( WindowIndex, ControlID ); if (ret == -1) { return PyInt_FromLong( 0 ); @@ -6610,7 +6629,17 @@ if (SlotID==-1) { SlotID=actor->inventory.FindCandidateSlot(SLOT_INVENTORY,0); } - if (SlotID!=-1) { + + if (SlotID==-1) { + // Create item on ground + Map *map = actor->GetCurrentArea(); + if (map) { + CREItem *item = CreateCreItem(ItemResRef, Charge0, Charge1, Charge2 ); + if (item) { + map->AddItemToLocation(actor->Pos, item); + } + } + } else { // Note: this forcefully gets rid of any item currently // in the slot without properly unequipping it actor->inventory.SetSlotItemRes( ItemResRef, SlotID, Charge0, Charge1, Charge2 ); @@ -6651,8 +6680,7 @@ char* newvalue = ( char* ) malloc( strlen( txt ) + 1 ); //duplicating the string strcpy( newvalue, txt ); map->AddMapNote(point, color, newvalue); - } - else { + } else { map->RemoveMapNote(point); } Py_INCREF( Py_None ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lyn...@us...> - 2008-06-14 12:36:58
|
Revision: 5205 http://gemrb.svn.sourceforge.net/gemrb/?rev=5205&view=rev Author: lynxlupodian Date: 2008-06-14 05:37:03 -0700 (Sat, 14 Jun 2008) Log Message: ----------- fixed GemRB_GetSlots using wrong parameters; now the starting tob inventory works almost perfectly (the staff got equipped in the second hand) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp Modified: gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-06-13 21:47:29 UTC (rev 5204) +++ gemrb/trunk/gemrb/plugins/GUIScript/GUIScript.cpp 2008-06-14 12:37:03 UTC (rev 5205) @@ -6173,7 +6173,7 @@ PyDoc_STRVAR( GemRB_GetSlots__doc, -"GetSlots(PartyID, SlotType)=>dict\n\n" +"GetSlots(PartyID, SlotType, flag)=>dict\n\n" "Returns a tuple of slots of the inventory of a PC matching the slot type criteria.\n" "If the flag is >0, it will ignore empty slots.\n" "If the flag is <0, it will ignore filled slots.\n" @@ -6202,11 +6202,10 @@ int i; Count = 0; for (i=0;i<MaxCount;i++) { - int id = core->QuerySlot(i); - if ((core->QuerySlotType( id ) & (ieDword) SlotType) != (ieDword) SlotType) { + if ((core->QuerySlotType( i ) & (ieDword) SlotType) != (ieDword) SlotType) { continue; } - CREItem *slot = actor->inventory.GetSlotItem( id ); + CREItem *slot = actor->inventory.GetSlotItem( i ); if (flag) { if(flag<0 && slot) continue; if(flag>0 && !slot) continue; @@ -6217,11 +6216,10 @@ PyObject* tuple = PyTuple_New( Count ); Count = 0; for (i=0;i<MaxCount;i++) { - int id = core->QuerySlot(i); - if ((core->QuerySlotType( id ) & (ieDword) SlotType) != (ieDword) SlotType) { + if ((core->QuerySlotType( i ) & (ieDword) SlotType) != (ieDword) SlotType) { continue; } - CREItem *slot = actor->inventory.GetSlotItem( id ); + CREItem *slot = actor->inventory.GetSlotItem( i ); if (flag) { if(flag<0 && slot) continue; if(flag>0 && !slot) continue; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |