XMLElement::~XMLElement() { while (_rootAttribute) { XMLAttribute* next = _rootAttribute->_next; DeleteAttribute(_rootAttribute); _rootAttribute = next; } }
StageStartingAttributesParser::~StageStartingAttributesParser(){ std::for_each( attributes.begin(), attributes.end(), DeleteAttribute() ); attributes.clear(); unullify( xmlFilePath ); }
// destructor Node::~Node() { // delete all attributes while (Attribute *attribute = fAttributes.First()) { status_t error = DeleteAttribute(attribute); if (error != B_OK) { FATAL(("Node::~Node(): Failed to delete attribute!\n")); break; } } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; dialog.snd = "Voice\ENAT\ENAT001"; Dialog.Text = DLG_TEXT[0]; Link.l1 = DLG_TEXT[1]; Link.l1.go = "Second Time"; break; case "Second time": dialog.snd = "Voice\ENAT\ENAT002"; dialog.text = DLG_TEXT[2]; link.l1 = DLG_TEXT[3]; link.l1.go = "third time"; break; case "third time": dialog.snd = "Voice\ENAT\ENAT003"; dialog.text = DLG_TEXT[4] + address_form.eng + DLG_TEXT[5]; link.l1 = DLG_TEXT[6]; link.l1.go = "exit"; break; case "Exit": NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("Story_DanielleOffersToBecomeFortCommander"); DialogExit(); break; } }
//Инициализация void LAi_type_guardian_Init(aref chr) { DeleteAttribute(chr, "location.follower"); bool isNew = false; if(CheckAttribute(chr, "chr_ai.type") == false) { isNew = true; }else{ if(chr.chr_ai.type != LAI_TYPE_GUARDIAN) isNew = true; } if(isNew == true) { //Новый тип DeleteAttribute(chr, "chr_ai.type"); chr.chr_ai.type = LAI_TYPE_GUARDIAN; chr.chr_ai.type.enemy = ""; chr.chr_ai.type.etime = "0"; chr.chr_ai.type.wait = ""; //Установим шаблон стояния LAi_tmpl_stay_InitTemplate(chr); }else{ //Востанавливаем состояние if(chr.chr_ai.type.wait == "attack") { LAi_type_guardian_CmdAttack(chr); }else{ if(chr.chr_ai.type.wait == "return") { LAi_type_guardian_Return(chr); } } } //Установим анимацию персонажу LAi_SetDefaultStayAnimation(chr); SendMessage(&chr, "lsl", MSG_CHARACTER_EX_MSG, "SetFightWOWeapon", false); //Сохраним адрес как точку охраны chr.chr_ai.type.group = chr.location.group; chr.chr_ai.type.locator = chr.location.locator; }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "Sit_Look_Around"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "Sit_Look_Around"; Dialog.cam = "1"; Dialog.snd = "voice\SNBA\SNBA001"; Dialog.Text = DLG_TEXT[0]; Link.l1 = DLG_TEXT[1]; Link.l1.go = "Exit_fight"; break; case "Exit_fight": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("Lucas_sign_fight2_1"); break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); string iDay, iMonth; iDay = environment.date.day; iMonth = environment.date.month; string lastspeak_date = iday + " " + iMonth; int iTest, iTime, iAddTime; switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Diag.TempNode = "First time"; if(NPChar.quest.meeting == "0") { dialog.snd = "Voice\CHWI\CHWI001"; d.Text = DLG_TEXT[0] + address_form.eng + DLG_TEXT[1]; Link.l1 = DLG_TEXT[2] + Pchar.name + " " + Pchar.lastname + DLG_TEXT[3]; Link.l1.go = "meeting"; NPChar.quest.meeting = "1"; Dialog.snd = "dialogs\speech\chrar001"; } else {
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; dialog.snd = "Voice\BEGU\BEGU001"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]; link.l1.go = "Exit"; break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; } }
void ProcessDialogEvent() { ref NPChar; DeleteAttribute(&Dialog,"Links"); aref Link, NextDiag; makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); int iTest; ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "dialogs\0\009"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]; link.l1.go = "exit"; AddDialogExitQuest("dark_teacher_WANT_kill_YOU"); break; case "Exit": NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
void XMLElement::DeleteAttribute(const char* name) { XMLAttribute* prev = 0; for (XMLAttribute* a = _rootAttribute; a; a = a->_next) { if (XMLUtil::StringEqual(name, a->Name())) { if (prev) { prev->_next = a->_next; } else { _rootAttribute = a->_next; } DeleteAttribute(a); break; } prev = a; } }
bool LAi_tmpl_follow_InitTemplate(aref chr) { SendMessage(&chr, "lsl", MSG_CHARACTER_EX_MSG, "LockFightMode", false); CharacterPlayAction(chr, ""); bool isNew = false; if(CheckAttribute(chr, "chr_ai.tmpl")) { if(chr.chr_ai.tmpl != LAI_TMPL_FOLLOW) isNew = true; }else{ isNew = true; } if(isNew) { DeleteAttribute(chr, "chr_ai.tmpl"); chr.chr_ai.tmpl = LAI_TMPL_FOLLOW; chr.chr_ai.tmpl.follow = ""; chr.chr_ai.tmpl.state = "wait"; chr.chr_ai.tmpl.time = "0"; chr.chr_ai.tmpl.wait = "0"; chr.chr_ai.tmpl.timeout = "-1"; if(LAi_IsInitedAI) SetCharacterTask_Stay(chr); }else{ chr.chr_ai.tmpl.wait = "0"; if(!CheckAttribute(chr, "chr_ai.tmpl.state")) chr.chr_ai.tmpl.state = "wait"; if(chr.chr_ai.tmpl.state == "falure") chr.chr_ai.tmpl.state = "wait"; if(!CheckAttribute(chr, "chr_ai.tmpl.time")) chr.chr_ai.tmpl.time = "0"; if(!CheckAttribute(chr, "chr_ai.tmpl.timeout")) chr.chr_ai.tmpl.timeout = "-1"; if(!CheckAttribute(chr, "chr_ai.tmpl.follow")) { chr.chr_ai.tmpl.follow = ""; chr.chr_ai.tmpl.state = "wait"; }else{ if(chr.chr_ai.tmpl.follow == "") chr.chr_ai.tmpl.state = "wait"; } LAi_tmpl_follow_updatetemplate(chr); } return true; }
void ProcessDialogEvent() { ref NPChar; DeleteAttribute(&Dialog,"Links"); aref Link, NextDiag; makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); int iTest; itest = 0; ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------ƒиалог первый - перва¤ встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "dialogs\0\009"; if (Characters[GetCharacterIndex("Milon Blacque")].quest.first_talk == "1") { Dialog.Text = DLG_TEXT[0] + Address_Form.Fra + DLG_TEXT[1] + Characters[GetCharacterIndex(DLG_TEXT[2])].name + DLG_TEXT[3]; Link.l1 = DLG_TEXT[4]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[5]; Link.l2.go = "MilonTalk_1"; } else { Dialog.Text = DLG_TEXT[6] + Address_Form.Fra + DLG_TEXT[7]; Link.l1 = DLG_TEXT[8] + PChar.ship.name + DLG_TEXT[9]; Link.l1.go = "node_2"; NextDiag.TempNode = "Second Time"; } break; case "node_2": Dialog.Text = DLG_TEXT[10]; Link.l1 = DLG_TEXT[11]; Link.l1.go = "node_3"; break; case "node_3": Dialog.Text = DLG_TEXT[12]; Link.l1 = DLG_TEXT[13]; Link.l1.go = "node_4"; break; case "node_4": Dialog.Text = DLG_TEXT[14] + Address_Form.Fra + DLG_TEXT[15] + NPChar.name + " " + NPChar.lastname + DLG_TEXT[16]; Link.l1 = DLG_TEXT[17] + PChar.name + " " + PChar.lastname + DLG_TEXT[18] + PChar.ship.name + DLG_TEXT[19]; Link.l1.go = "node_5"; break; case "node_5": Dialog.Text = DLG_TEXT[20] + Address_Form.fra + DLG_TEXT[21]; Link.l1 = DLG_TEXT[22]; Link.l1.go = "node_6"; break; case "node_6": Dialog.Text = DLG_TEXT[23]; Link.l1 = DLG_TEXT[24]; Link.l1.go = "node_7"; if (makeint(PChar.money) > 1) { Link.l2 = DLG_TEXT[25]; Link.l2.go = "node_9"; } break; case "node_7": Dialog.Text = DLG_TEXT[26] + Address_Form.Fra + DLG_TEXT[27]; Link.l1 = DLG_TEXT[28]; Link.l1.go = "Exit"; if (makeint(PChar.money) > 1) { Link.l2 = DLG_TEXT[29]; Link.l2.go = "node_9"; } break; case "node_9": AddMoneyToCharacter(pchar, -1); Dialog.Text = DLG_TEXT[30] + Address_Form.Fra + DLG_TEXT[31]; Link.l1 = DLG_TEXT[32]; if (Characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers == "0") { Link.l1.go = "node_10"; } else { if (Characters[GetCharacterIndex("Thierry Bosquet")].quest.gambling == "0") { Link.l1.go = "node_12"; } else { Link.l1.go = "rumours"; } } break; case "node_10": Dialog.Text = DLG_TEXT[33] + Characters[GetCharacterIndex(DLG_TEXT[34])].name + " " + Characters[GetCharacterIndex(DLG_TEXT[35])].lastname + DLG_TEXT[36]; Characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers = "1"; Link.l1 = DLG_TEXT[37]; Link.l1.go = "node_11"; Link.l2 = DLG_TEXT[38]; Link.l2.go = "port watcher"; break; case "node_11": Dialog.Text = DLG_TEXT[39]; Link.l1 = DLG_TEXT[40]; Link.l1.go = "node_12"; Link.l2 = DLG_TEXT[41] + NPChar.name + DLG_TEXT[42]; Link.l2.go = "exit"; break; case "node_12": Dialog.Text = DLG_TEXT[43]; Link.l1 = DLG_TEXT[44]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[45]; Link.l2.go = "node_13"; break; case "node_13": Dialog.Text = DLG_TEXT[46]; Link.l1 = DLG_TEXT[47]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[48]; Link.l2.go = "Rumours"; break; case "port watcher": Dialog.Text = DLG_TEXT[49]; Link.l1 = DLG_TEXT[50]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[51]; Link.l2.go = "node_12"; break; // -----------------------------------ƒиалог если игрок поговорил с Milon Blacque case "MilonTalk_1": Dialog.Text = DLG_TEXT[52] + Address_Form.Fra + DLG_TEXT[53] + Characters[GetCharacterIndex(DLG_TEXT[54])].name + DLG_TEXT[55]; Link.l1 = DLG_TEXT[56]; Link.l1.go = "MilonTalk_11"; break; case "MilonTalk_11": Dialog.Text = DLG_TEXT[57]; Link.l1 = DLG_TEXT[58]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[59]; Link.l2.go = "MilonTalk_2"; break; case "MilonTalk_2": Dialog.Text = DLG_TEXT[60]; Link.l1 = DLG_TEXT[61]; Link.l1.go = "MilonTalk_3"; break; case "MilonTalk_3": Characters[GetCharacterIndex("Milon Blacque")].quest.first_talk = "done"; Dialog.Text = DLG_TEXT[62] + Characters[GetCharacterIndex(DLG_TEXT[63])].name + DLG_TEXT[64]; Link.l1 = DLG_TEXT[65]; Link.l1.go = "Exit"; Link.l2 = DLG_TEXT[66]; Link.l2.go = "node_6"; break; // -----------------------------------ƒиалог при последующих встречах case "Second Time": if (Characters[GetCharacterIndex("Milon Blacque")].quest.first_talk == "1") { Dialog.Text = DLG_TEXT[67] + Address_Form.Fra + DLG_TEXT[68] + Characters[GetCharacterIndex(DLG_TEXT[69])].name + DLG_TEXT[70]; Link.l1 = DLG_TEXT[71]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[72]; Link.l2.go = "MilonTalk_1"; } else { Dialog.Text = DLG_TEXT[73] + Address_Form.Fra + DLG_TEXT[74]; Link.l1 = DLG_TEXT[75]; if (Characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers == "0") { Link.l1.go = "node_10"; } else { if (Characters[GetCharacterIndex("Thierry Bosquet")].quest.gambling == "0") { Link.l1.go = "node_12"; } else { Link.l1.go = "rumours"; } } iTest = iTest + 1; if ((Characters[GetCharacterIndex("rachel Blacque")].quest.badguy == "1")&&(iTest < QUEST_COUNTER)) { Link.l2 = DLG_TEXT[76] + characters[getCharacterIndex(DLG_TEXT[77])].name + DLG_TEXT[78]; Link.l2.go = "Rachel"; iTest = iTest + 1; } if ((characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers == "teodoro")&&(iTest < QUEST_COUNTER)) { dialog.text = DLG_TEXT[79] + address_form.fra + DLG_TEXT[80]; link.l3 = pcharrepphrase(DLG_TEXT[81], DLG_TEXT[82]); link.l3.go = "smugglers"; iTest = iTest + 1; } Link.l99 = DLG_TEXT[83]; Link.l99.go = "exit"; } break; case "smugglers": dialog.text = DLG_TEXT[84] + address_form.fra + DLG_TEXT[85]; link.l1 = pcharrepphrase(DLG_TEXT[86], DLG_TEXT[87]); link.l1.go = "smugglers_1"; break; case "smugglers_1": dialog.text = DLG_TEXT[88]; link.l1 = pcharrepphrase(DLG_TEXT[89], DLG_TEXT[90]); link.l1.go = "smugglers_2"; break; case "smugglers_2": dialog.text = DLG_TEXT[91]; link.l1 = pcharrepphrase(DLG_TEXT[92], DLG_TEXT[93]); link.l1.go = "smugglers_3"; break; case "smugglers_3": dialog.text = DLG_TEXT[94]; link.l1 = pcharrepphrase(DLG_TEXT[95], DLG_TEXT[96]); link.l1.go = "exit"; /////////////////////////////////////////////// //активизируем ветку, когда на игрока нападают! characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers = "orable"; /////////////////////////////////////////////// link.l2 = pcharrepphrase(DLG_TEXT[97], DLG_TEXT[98]); link.l2.go = pcharrepphrase("smugglers_good", "smugglers_bad"); break; case "smugglers_good": dialog.text = DLG_TEXT[99] + address_form.fra + DLG_TEXT[100]; if (makeint(pchar.money)>=500) { link.l1 = DLG_TEXT[101]; link.l1.go = "smugglers_good_1"; } link.l2 = DLG_TEXT[102]; link.l2.go = "smugglers_good_denied"; break; case "smugglers_good_denied": dialog.text = DLG_TEXT[103] + address_form.fra + DLG_TEXT[104]; link.l1 = DLG_TEXT[105]; characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers = "orable"; break; case "smugglers_good_1": dialog.text = DLG_TEXT[106] + characters[GetCharacterIndex(DLG_TEXT[107])].name + " " + characters[GetCharacterIndex(DLG_TEXT[108])].lastname + DLG_TEXT[109]; link.l1 = DLG_TEXT[110]; link.l1.go = "exit"; AddMoneyToCharacter(pchar, -500); characters[GetCharacterIndex("Turpin Cabanel")].quest.smugglers = "orable_truth"; break; case "smugglers_bad": dialog.text = DLG_TEXT[111]; link.l1 = DLG_TEXT[112]; link.l1.go = "smugglers_bad_1"; break; case "smugglers_bad_1": dialog.text = DLG_TEXT[113]; link.l1 = DLG_TEXT[114]; link.l1.go = "smugglers_bad_2"; break; case "smugglers_bad_2": dialog.text = DLG_TEXT[115]; link.l1 = DLG_TEXT[116]; link.l1.go = "smugglers_good_1"; break; case "Rumours": Dialog.Text = SelectRumour(); Link.l1 = DLG_TEXT[117]; Link.l1.go = "exit"; break; case "Rachel": Dialog.Text = DLG_TEXT[118] + Address_Form.Fra + DLG_TEXT[119]; Link.l1 = DLG_TEXT[120]; Link.l1.go = "Rachel_good"; Link.l2 = DLG_TEXT[121]; Link.l2.go = "Rachel_bad"; break; case "Rachel_good": Dialog.Text = DLG_TEXT[122]; Link.l1 = DLG_TEXT[123]; Link.l1.go = "exit"; Characters[GetCharacterIndex("Rachel Blacque")].quest.badguy = "done"; break; case "Rachel_bad": Dialog.Text = DLG_TEXT[124] + Address_Form.Fra + DLG_TEXT[125]; Link.l1 = DLG_TEXT[126]; Link.l1.go = "Rachel_good"; Link.l2 = DLG_TEXT[127]; Link.l2.go = "Rachel_bad_2"; break; case "Rachel_bad_2": Dialog.Text = DLG_TEXT[128]; Link.l1 = DLG_TEXT[129] + Characters[GetCharacterIndex(DLG_TEXT[130])].name + DLG_TEXT[131]; Link.l1.go = "Rachel_bad_3"; break; case "Rachel_bad_3": Dialog.Text = DLG_TEXT[132] + Address_Form.Fra + DLG_TEXT[133]; Link.l1 = DLG_TEXT[134]; Link.l1.go = "exit"; Characters[GetCharacterIndex("Rachel Blacque")].quest.badguy = "money"; NextDiag.TempNode = "MilonTalk"; characters[GetCharacterIndex("Rachel Blacque")].location = "none"; npchar.location = "none"; Rumour[3].state = "active"; break; case "Exit": NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); switch(Dialog.CurrentNode) { case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; dialog.snd = "Voice\ANAC\ANAC001"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]; link.l1.go = "node_2"; break; case "node_2": dialog.snd = "Voice\ANAC\ANAC002"; dialog.text = DLG_TEXT[2]; link.l1 = DLG_TEXT[3]; link.l1.go = "exit"; break; case "ask_about_artois": dialog.snd = "Voice\ANAC\ANAC003"; dialog.text = DLG_TEXT[4]; link.l1 = DLG_TEXT[5]; link.l1.go = "exit"; AddDialogExitQuest("Blaze_cop_dialog"); break; case "artois_lay": dialog.snd = "Voice\ANAC\ANAC004"; dialog.text = DLG_TEXT[6]; link.l1 = DLG_TEXT[7]; link.l1.go = "artois_lay_2"; break; case "artois_lay_2": dialog.snd = "Voice\ANAC\ANAC005"; dialog.text = DLG_TEXT[8]; link.l1 = DLG_TEXT[9]; link.l1.go = "exit"; AddDialogExitQuest("fight_for_artois_with_child_of_giens"); break; case "doctor": dialog.snd = "Voice\ANAC\ANAC006"; dialog.text = DLG_TEXT[10]; link.l1 = DLG_TEXT[11]; link.l1.go = "doctor_2"; break; case "doctor_2": dialog.snd = "Voice\ANAC\ANAC007"; dialog.text = DLG_TEXT[12]; if (makeint(pchar.money)>=2000) { link.l1 = DLG_TEXT[13]; link.l1.go = "doctor_3"; } link.l2 = DLG_TEXT[14]; link.l2.go = "exit_doctor_bad"; break; case "doctor_3": dialog.snd = "Voice\ANAC\ANAC008"; dialog.text = DLG_TEXT[15]; link.l1 = DLG_TEXT[16]; link.l1.go = "exit_doctor_good"; link.l2 = DLG_TEXT[17]; link.l2.go = "exit_doctor_bad"; break; case "exit_doctor_good": Diag.CurrentNode = Diag.TempNode; DialogExit(); AddDialogExitQuest("exit_doctor_good"); break; case "remove": if (npchar.alignment == "good") { dialog.snd = "Voice\ANAC\ANAC009"; dialog.text = DLG_TEXT[18]; link.l1 = DLG_TEXT[19]; } else { dialog.snd = "Voice\ANAC\ANAC010"; dialog.text = DLG_TEXT[20]; link.l1 = DLG_TEXT[21]; } link.l1.go = "exit"; pchar.removed_officer = GetCharacterIndex(npchar.id); AddDialogExitQuest("removed_officer_runaway"); npchar.location = npchar.homelocation; npchar.location.group = npchar.homelocation.group; npchar.location.locator = npchar.homelocation.locator; break; case "hired_again": dialog.snd = "Voice\ANAC\ANAC011"; dialog.text = DLG_TEXT[22]; link.l1 = DLG_TEXT[23]; link.l1.go = "hired_again_2"; break; case "hired_again_2": dialog.snd = "Voice\ANAC\ANAC012"; dialog.text = DLG_TEXT[24]; link.l1 = DLG_TEXT[25]; link.l1.go = "exit"; AddPassenger(Pchar, npchar, 0); npchar.loyality = 1; npchar.dialog.filename = npchar.selfdialog.filename; npchar.dialog.currentnode = npchar.selfdialog.currentnode; break; case "exit_doctor_bad": Diag.CurrentNode = Diag.TempNode; DialogExit(); AddDialogExitQuest("exit_doctor_bad"); break; case "exit": Diag.CurrentNode = Diag.TempNode; DialogExit(); break; case "prepare_convoy_quest": dialog.text = DLG_TEXT[26]; link.l1 = DLG_TEXT[27]; link.l1.go = "prepare_convoy_quest_2"; break; case "prepare_convoy_quest_2": dialog.text = DLG_TEXT[28]; link.l1 = DLG_TEXT[29]; link.l1.go = "prepare_convoy_quest_3"; break; case "prepare_convoy_quest_3": /*Diag.CurrentNode = Diag.TempNode; DialogExit(); AddDialogExitQuest("prepare_gen_convoy_quest"); break; case "prepare_convoy_quest_4":*/ GenerateConvoyQuest(); dialog.text = DLG_TEXT[30] + pchar.quest.destination + DLG_TEXT[31] + pchar.quest.convoymoney + DLG_TEXT[32]; link.l1 = DLG_TEXT[33]; link.l1.go = "convoy_agreeded"; link.l2 = DLG_TEXT[34]; link.l2.go = "convoy_refused"; break; case "convoy_refused": Diag.CurrentNode = Diag.TempNode; DialogExit(); AddDialogExitQuest("convoy_refused"); break; case "convoy_agreeded": Diag.CurrentNode = Diag.TempNode; DialogExit(); AddDialogExitQuest("convoy_agreeded"); break; case "complete_convoy_quest": dialog.text = DLG_TEXT[35]; Link.l1 = DLG_TEXT[36]; link.l1.go = "exit"; AddDialogExitQuest("convoy_refused"); break; } }
void ProcessDialogEvent() { ref NPChar; DeleteAttribute(&Dialog,"Links"); aref Link, NextDiag; makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); int iTest; string iDay, iMonth; iDay = environment.date.day; iMonth = environment.date.month; string lastspeak_date = iday + " " + iMonth; ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; dialog.snd = "Voice\ARMA\ARMA001"; dialog.text = DLG_TEXT[0]; link.l1 = pcharrepphrase(DLG_TEXT[1], DLG_TEXT[2]); link.l1.go = "exit"; if ((characters[GetCharacterIndex("Sabine Matton")].quest.hire != "ransom") && (characters[GetCharacterIndex("Sabine Matton")].quest.hire != "enemy_forever") && (pchar.location == "Falaise_de_Fleur_store")) { dialog.snd1 = "Voice\ARMA\ARMA002"; dialog.snd2 = "Voice\ARMA\ARMA003"; dialog.snd3 = "Voice\ARMA\ARMA004"; Dialog.Text = randphrase(DLG_TEXT[3] + Address_form.Fra + DLG_TEXT[4], DLG_TEXT[5] + Address_Form.Fra + DLG_TEXT[6], DLG_TEXT[7], &dialog, dialog.snd1, dialog.snd2, dialog.snd3); Link.l1 = DLG_TEXT[8]; Link.l1.go = "market"; link.l2 = DLG_TEXT[9]; link.l2.go = "exit"; if (characters[GetCharacterIndex("Sabine Matton")].quest.hire != "was_captured_done") { link.l3 = DLG_TEXT[10]; link.l3.go = "quests"; } } if ((characters[GetCharacterIndex("Sabine Matton")].quest.hire == "ransom_1")&&(pchar.location == "Falaise_De_Fleur_shore")) // разговор на пляже { dialog.snd = "Voice\ARMA\ARMA005"; dialog.text = DLG_TEXT[11] + Characters[GetCharacterIndex(DLG_TEXT[12])].name + DLG_TEXT[13]; link.l1 = pcharrepphrase(DLG_TEXT[14], DLG_TEXT[15]); link.l1.go = "ransom_money"; link.l2 = pcharrepphrase(DLG_TEXT[16], DLG_TEXT[17]); link.l2.go = "ransom_bad"; } if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "enemy_forever_1") { dialog.snd = "Voice\ARMA\ARMA006"; dialog.text = DLG_TEXT[18]; link.l1 = pcharrepphrase(DLG_TEXT[19], DLG_TEXT[20]); link.l1.go = "exit"; } if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "danielle_on_ship_1") { dialog.snd = "Voice\ARMA\ARMA007"; dialog.text = DLG_TEXT[21]; link.l3 = pcharrepphrase(DLG_TEXT[22], DLG_TEXT[23]); link.l3.go = "exit"; link.l4 = pcharrepphrase(DLG_TEXT[24], DLG_TEXT[25]); link.l4.go = "danielle_daughter_1"; } NextDiag.TempNode = "First time"; break; case "quests": iTest = 0; dialog.snd = "Voice\ARMA\ARMA008"; Dialog.text = DLG_TEXT[26]; ////////////////////////////// // Выдача квестов ////////////////////////////// if (npchar.quest_begin == "100") { Link.l1 = DLG_TEXT[27]; if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "blaze_begin_1" && makeint(pchar.reputation) > 40) { link.l1.go = "daughter"; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "10000") { link.l1.go = "baldewyn"; } if (npchar.quest.to_redmond_1 == "0" && !(GetNationRelation2MainCharacter(FRANCE) == RELATION_ENEMY)) { link.l1.go = "node_1"; } } if (CheckAttribute(pchar, "quest.iQuantityGoods")) { int iQuantityShipGoods = pchar.quest.iQuantityGoods; int iQuestTradeGoods = pchar.quest.iTradeGoods; } if (CheckQuestAttribute("generate_trade_quest_progress", "begin") || CheckQuestAttribute("generate_trade_quest_progress", "failed")) { if (CheckQuestAttribute("iTradeNation", npchar.nation) && GetSquadronGoods(pchar, iQuestTradeGoods) >= iQuantityShipGoods) { dialog.snd = "Voice\ARMA\ARMA009"; dialog.text = DLG_TEXT[28]; link.l1 = DLG_TEXT[29]; link.l1.go = "generate_quest_2"; } } else { if (!CheckQuestAttribute("generate_trade_quest_progress", "begin")) { link.l2 = DLG_TEXT[30]; link.l2.go = "generate_quest"; } } ////////////////////////////// // ПРИЕМ КВЕСТОВ ////////////////////////////// ////////////////////////////// // Квест балдуина Кофье ////////////////////////////// if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "not_money" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[31], DLG_TEXT[32]); link.l2.go = "baldewyn_done"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "not_money_2" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[33], DLG_TEXT[34] + characters[GetCharacterIndex(DLG_TEXT[35])].name + DLG_TEXT[36]); link.l2.go = "baldewyn_done"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "not_money_3" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[37], DLG_TEXT[38]); link.l2.go = "money_1"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "money_1" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[39], DLG_TEXT[40]); link.l2.go = "baldewyn_work_done"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "money_4" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[41] + Characters[GetCharacterIndex(DLG_TEXT[42])].name + " " + Characters[GetCharacterIndex(DLG_TEXT[43])].lastname + DLG_TEXT[44], DLG_TEXT[45] + characters[GetCharacterIndex(DLG_TEXT[46])].name + DLG_TEXT[47]); link.l2.go = "baldewyn_work_done_one"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire == "money_2" && iTest < QUEST_COUNTER) { link.l2 = pcharrepphrase(DLG_TEXT[48], DLG_TEXT[49] + characters[GetCharacterIndex(DLG_TEXT[50])] + DLG_TEXT[51]); link.l2.go = "baldewyn_guard"; iTest = iTest + 1; } ////////////////////////////// // Конец квеста балдуина Кофье ////////////////////////////// if (npchar.quest.to_redmond_1 == "cargo_done_1" && iTest < QUEST_COUNTER) { link.l3 = pcharrepphrase(DLG_TEXT[52], DLG_TEXT[53] + npchar.name + DLG_TEXT[54]); link.l3.go = "redmond_done"; iTest = iTest + 1; } if (npchar.quest.to_redmond_1 == "cargo_not_done_1" && iTest < QUEST_COUNTER) { Link.l3 = pcharrepphrase(DLG_TEXT[55], DLG_TEXT[56]); link.l3.go = "redmond_quest"; iTest = iTest + 1; } if (Characters[GetCharacterIndex("Thomas O'Reily")].quest.first_job == "100" && GetSquadronGoods(PChar,GOOD_SILK)>= 200 && iTest < QUEST_COUNTER) { Link.l4 = pcharrepphrase(DLG_TEXT[57] + Characters[GetCharacterIndex(DLG_TEXT[58])].name + Characters[GetCharacterIndex(DLG_TEXT[59])].lastname + DLG_TEXT[60], characters[GetCharacterIndex(DLG_TEXT[61])].name + DLG_TEXT[62]); Link.l4.go = "First_job_done"; iTest = iTest + 1; } ////////////////////////////// // Квест про дочку Арно Маттона ////////////////////////////// if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "almost_done_1" && iTest < QUEST_COUNTER) { link.l5 = DLG_TEXT[63]; link.l5.go = "daughter_done"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "almost_done_ransom_1" && iTest < QUEST_COUNTER) { link.l5 = DLG_TEXT[64]; link.l5.go = "daughter_done_1"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "almost_done_ransom_free_1" && iTest < QUEST_COUNTER) { link.l5 = pcharrepphrase(DLG_TEXT[65], DLG_TEXT[66]); link.l5.go = "daughter_done_1"; iTest = iTest + 1; } if (characters[GetCharacterIndex("Sabine Matton")].quest.hire == "captured_by_blaze_1" || characters[GetCharacterIndex("Sabine Matton")].quest.hire == "captured_by_blaze_again" && iTest < QUEST_COUNTER) { Link.l5 = pcharrepphrase(DLG_TEXT[67], DLG_TEXT[68]); Link.l5.go = "ransom"; } ////////////////////////////// // Конец квеста про дочку Арно маттона ////////////////////////////// Link.l99 = DLG_TEXT[69]; Link.l99.go = "exit"; break; case "danielle_daughter_1": dialog.snd = "Voice\ARMA\ARMA010"; dialog.text = DLG_TEXT[70]; link.l1 = pcharrepphrase(DLG_TEXT[71], DLG_TEXT[72]); link.l1.go = "danielle_daughter_2"; link.l2 = pcharrepphrase(DLG_TEXT[73], DLG_TEXT[74]); link.l2.go = "ransom_1"; break; case "danielle_daughter_2": dialog.snd = "Voice\ARMA\ARMA011"; dialog.text = DLG_TEXT[75]; link.l1 = pcharrepphrase(DLG_TEXT[76], DLG_TEXT[77]); link.l1.go = "danielle_daughter_3"; break; case "danielle_daughter_3": dialog.snd = "Voice\ARMA\ARMA012"; dialog.text = DLG_TEXT[78]; link.l1 = pcharrepphrase(DLG_TEXT[79], DLG_TEXT[80]); link.l1.go = "exit"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "done"; RemovePassenger(pchar, &characters[GetCharacterIndex("Sabine Matton")]); pchar.experience = makeint(pchar.experience) + 100; break; case "ransom_bad": dialog.snd = "Voice\ARMA\ARMA013"; dialog.text = DLG_TEXT[81]; link.l1 = pcharrepphrase(DLG_TEXT[82], DLG_TEXT[83]); link.l1.go = "exit"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "enemy_forever"; ChangeCharacterReputation(pchar, -2); /////////////////////////////////////////////////////////////////////////// // Арно уходит, а за нами начинается охотиться 1 фрегат и 2 наемных убийцы, плюс Франция становится враждебной. /////////////////////////////////////////////////////////////////////////// break; case "ransom_money": dialog.snd = "Voice\ARMA\ARMA014"; dialog.text = DLG_TEXT[84]; link.l1 = pcharrepphrase(DLG_TEXT[85], DLG_TEXT[86]); link.l1.go = "ransom_money_1"; link.l2 = pcharrepphrase(DLG_TEXT[87], DLG_TEXT[88]); link.l2.go = "ransom_bad"; break; case "ransom_money_1": dialog.snd = "Voice\ARMA\ARMA015"; dialog.text = DLG_TEXT[89]; link.l1 = pcharrepphrase(DLG_TEXT[90], DLG_TEXT[91]); link.l1.go = "exit"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "was_captured_done"; ChangeCharacterReputation(pchar, -1); AddMoneyToCharacter(pchar, 5000); RemovePassenger(pchar, Characters[GetCharacterIndex("Sabine Matton")]); //fading(); ChangeCharacterAddress(&characters[GetCharacterIndex("Sabine Matton")], "shore1","citizen06"); //появление девушки. npchar.location = "Falaise_de_Fleur_store"; npchar.location.locator = "locator4"; characters[GetCharacterIndex("Sabine Matton")].location = "none"; break; case "ransom": dialog.snd = "Voice\ARMA\ARMA016"; dialog.text = DLG_TEXT[92]; link.l1 = pcharrepphrase(DLG_TEXT[93], DLG_TEXT[94]); link.l1.go = "ransom_1"; break; case "ransom_1": dialog.snd = "Voice\ARMA\ARMA017"; dialog.text = DLG_TEXT[95]; link.l1 = pcharrepphrase(DLG_TEXT[96], DLG_TEXT[97]); link.l1.go = "ransom_stupid"; link.l2 = pcharrepphrase(DLG_TEXT[98], DLG_TEXT[99]); link.l2.go = "ransom_2"; break; case "ransom_2": dialog.snd = "Voice\ARMA\ARMA018"; dialog.text = DLG_TEXT[100]; link.l1 = pcharrepphrase(DLG_TEXT[101], DLG_TEXT[102]); link.l1.go = "exit"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "ransom"; npchar.location = "shore1"; npchar.location.locator = "citizen05"; break; case "ransom_stupid": dialog.snd = "Voice\ARMA\ARMA019"; dialog.text = DLG_TEXT[103]; link.l1 = DLG_TEXT[104]; link.l1.go = "exit"; /////////////////////////////////////////////////////////////////////// // Появление девушки, перезагрузка локейшена. Франция враждебна. Драка. /////////////////////////////////////////////////////////////////////// characters[GetCharacterIndex("Sabine Matton")].quest.hire = "enemy_forever"; ChangeCharacterReputation(pchar, -1); break; case "daughter_done": dialog.snd = "Voice\ARMA\ARMA020"; dialog.text = DLG_TEXT[105]; link.l1 = pcharrepphrase(DLG_TEXT[106], DLG_TEXT[107]); link.l1.go = "trade_guild"; link.l2 = pcharrepphrase(DLG_TEXT[108], DLG_TEXT[109]); link.l2.go = "exit"; npchar.quest_begin = "0"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "done"; characters[GetCharacterIndex("Sabine Matton")].quest.love = "1"; break; case "daughter_done_1": dialog.snd = "Voice\ARMA\ARMA021"; dialog.text = DLG_TEXT[110]; link.l1 = pcharrepphrase(DLG_TEXT[111], DLG_TEXT[112]); link.l1.go = "exit"; characters[GetCharacterIndex("Sabine Matton")].quest.hire = "was_captured_done"; npchar.quest_begin = "0"; npchar.skill.commerce = makeint(npchar.skill.commerce) + 2; break; //////////////////////////////////////////////// // TRADE GUILD QUEST //////////////////////////////////////////////// case "trade_guild": link.l1 = DLG_TEXT[113]; link.l1.go = "exit"; break; //////////////////////////////////////////////// // END OF TRADE GUILD QUEST //////////////////////////////////////////////// case "daughter": dialog.snd = "Voice\ARMA\ARMA022"; dialog.text = DLG_TEXT[114]; link.l1 = DLG_TEXT[115]; link.l1.go = "daughter_1"; break; case "daughter_1": dialog.snd = "Voice\ARMA\ARMA023"; dialog.text = DLG_TEXT[116]; link.l1 = DLG_TEXT[117]; link.l1.go = "daughter_2"; break; case "daughter_2": dialog.snd = "Voice\ARMA\ARMA024"; dialog.text = DLG_TEXT[118]; link.l1 = DLG_TEXT[119]; link.l1.go = "daughter_3"; break; case "daughter_3": dialog.snd = "Voice\ARMA\ARMA025"; dialog.text = DLG_TEXT[120]; link.l1 = DLG_TEXT[121]; link.l1.go = "daughter_4"; break; case "daughter_4": dialog.snd = "Voice\ARMA\ARMA026"; dialog.text = DLG_TEXT[122]; link.l1 = DLG_TEXT[123]; link.l1.go = "daughter_5"; break; case "daughter_5": dialog.snd = "Voice\ARMA\ARMA027"; dialog.text = DLG_TEXT[124]; link.l1 = DLG_TEXT[125]; link.l1.go = "daughter_6"; break; case "daughter_6": dialog.snd = "Voice\ARMA\ARMA028"; dialog.text = DLG_TEXT[126] + Characters[GetCharacterIndex(DLG_TEXT[127])].name + " " + Characters[GetCharacterIndex(DLG_TEXT[128])].lastname + DLG_TEXT[129]; link.l1 = DLG_TEXT[130]; link.l1.go = "daughter_9"; link.l2 = DLG_TEXT[131]; link.l2.go = "daughter_7"; link.l3 = DLG_TEXT[132]; link.l3.go = "daughter_denied"; break; case "daughter_7": dialog.snd = "Voice\ARMA\ARMA029"; dialog.text = DLG_TEXT[133]; link.l1 = DLG_TEXT[134]; link.l1.go = "daughter_8"; link.l2 = DLG_TEXT[135]; link.l2.go = "daughter_denied"; break; case "daughter_8": dialog.snd = "Voice\ARMA\ARMA030"; dialog.text = DLG_TEXT[136]; link.l1 = DLG_TEXT[137]; link.l1.go = "daughter_9"; AddMoneyToCharacter(pchar, 1500); break; case "daughter_9": dialog.snd = "Voice\ARMA\ARMA031"; dialog.text = DLG_TEXT[138] + characters[GetCharacterIndex(DLG_TEXT[139])].name + " " + characters[GetCharacterIndex(DLG_TEXT[140])].lastname + DLG_TEXT[141]; link.l1 = DLG_TEXT[142]; link.l1.go = "daughter_10"; break; case "daughter_10": dialog.snd = "Voice\ARMA\ARMA032"; dialog.text = DLG_TEXT[143]; link.l1 = DLG_TEXT[144] + pchar.ship.name + DLG_TEXT[145]; link.l1.go = "exit"; ////////////////////////////////// //ADD_LETTER ////////////////////////////////// characters[GetCharacterIndex("Sabine Matton")].quest.hire = "blaze_on_ship"; npchar.quest_begin = "1"; AddPassenger(pchar, &characters[GetCharacterIndex("Sabine Matton")], 0); ChangeCharacterAddress(&characters[GetCharacterIndex("Sabine Matton")], "none", "none"); break; case "daughter_denied": dialog.snd = "Voice\ARMA\ARMA033"; dialog.text = DLG_TEXT[146]; link.l1 = DLG_TEXT[147]; link.l1.go = "exit"; link.l2 = DLG_TEXT[148]; link.l2.go = "First time"; characters[GetCharacterIndex("Sabine Matton")].quest = "done"; break; case "baldewyn_work_done": AddMoneyToCharacter(pchar, -2500)); dialog.snd = "Voice\ARMA\ARMA034"; dialog.text = DLG_TEXT[149]; link.l1 = pcharrepphrase(DLG_TEXT[150], DLG_TEXT[151]); link.l1.go = "arnaud_bad_guy"; link.l2 = pcharrepphrase(DLG_TEXT[152], DLG_TEXT[153]); link.l2.go = "exit"; link.l3 = pcharrepphrase(DLG_TEXT[154], DLG_TEXT[155]); link.l3.go = "First time"; AddMoneyToCharacter(pchar, makeint(npchar.money.quest)); characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "almost_done_1"; npchar.quest_begin = "0"; npchar.quest.money = "0"; Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; break; case "baldewyn_work_done_one": dialog.snd = "Voice\ARMA\ARMA035"; dialog.text = DLG_TEXT[156]; link.l2 = pcharrepphrase(DLG_TEXT[157], DLG_TEXT[158]); link.l2.go = "exit"; link.l3 = pcharrepphrase(DLG_TEXT[159], DLG_TEXT[160]); link.l3.go = "First time"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "almost_done_1"; AddMoneyToCharacter(pchar, -2000); Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; break; case "money_1": dialog.snd = "Voice\ARMA\ARMA036"; dialog.text = DLG_TEXT[161]; link.l1 = DLG_TEXT[162]; link.l1.go = "money_2"; link.l2 = DLG_TEXT[163]; link.l2.go = "arnaud_bad_guy"; break; case "arnaud_bad_guy": dialog.snd = "Voice\ARMA\ARMA037"; dialog.text = DLG_TEXT[164]; link.l1 = DLG_TEXT[165]; link.l1.go = "arnaud_bad_guy_1"; link.l2 = DLG_TEXT[166]; link.l2.go = "exit"; break; case "arnaud_bad_guy_1": dialog.snd = "Voice\ARMA\ARMA038"; dialog.text = DLG_TEXT[167]; link.l1 = DLG_TEXT[168]; link.l1.go = "exit"; link.l2 = DLG_TEXT[169]; link.l2.go = "First Time"; break; case "money_2": dialog.snd = "Voice\ARMA\ARMA039"; dialog.text = DLG_TEXT[170]; link.l1 = DLG_TEXT[171]; link.l1.go = "exit"; link.l2 = DLG_TEXT[172]; link.l2.go = "First time"; AddMoneyToCharacter(pchar, makeint(npchar.money.quest)); characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "money_3"; npchar.quest_begin = "0"; npchar.quest.money = "0"; Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; break; case "baldewyn_guard": dialog.snd = "Voice\ARMA\ARMA040"; dialog.text = DLG_TEXT[173] + Address_Form.fra + DLG_TEXT[174]; link.l1 = DLG_TEXT[175]; link.l1.go = "exit"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "done"; npchar.quest_begin = "0"; npchar.quest.money = "0"; Rumour[4].state = "active"; characters[GetCharacterIndex("Sabine Matton")].location = "none"; break; case "first_job_done": Characters[GetCharacterIndex("Thomas O'Reily")].quest.first_job = "complete"; dialog.snd = "Voice\ARMA\ARMA041"; dialog.Text = DLG_TEXT[176]; Link.l1 = DLG_TEXT[177]; Link.l1.go = "First_job_done_1"; break; case "First_job_done_1": dialog.snd = "Voice\ARMA\ARMA042"; dialog.Text = DLG_TEXT[178] + address_form.fra + DLG_TEXT[179]; Link.l1 = DLG_TEXT[180]; Link.l1.go = "First_job_done_2"; break; case "First_job_done_2": RemoveCharacterGoods(PChar,GOOD_SILK, 100); RemoveCharacterGoods(PChar,GOOD_RUM, 100); RemoveCharacterGoods(PChar,GOOD_PAPRIKA, 100); dialog.snd = "Voice\ARMA\ARMA043"; dialog.Text = DLG_TEXT[181] + address_form.fra + " " + PChar.name + DLG_TEXT[182]; Link.l1 = DLG_TEXT[183]; Link.l1.go = "exit"; break; case "redmond_quest": dialog.snd = "Voice\ARMA\ARMA044"; Dialog.text = DLG_TEXT[184]; link.l1 = DLG_TEXT[185]; link.l1.go = "redmond_not_done"; link.l2 = DLG_TEXT[186]; link.l2.go = "redmond_not_done_1"; break; case "generate_quest": if (npchar.quest.trade_date != lastspeak_date) { npchar.quest.trade_date = lastspeak_date; //проверка враждебности нам страны торговца if (GetNationRelation2MainCharacter(FRANCE) == RELATION_ENEMY) { dialog.snd = "Voice\ARMA\ARMA045"; dialog.text = DLG_TEXT[187]; link.l1 = DLG_TEXT[188]; link.l1.go = "exit"; } else { int iTradeNation = GenerateNationTrade(FRANCE); if (iTradeNation < 0) { dialog.snd = "Voice\ARMA\ARMA046"; dialog.text = DLG_TEXT[189]; link.l1 = DLG_TEXT[190]; link.l1.go = "exit"; } else { //проверяем импорт/экспорт int iTradeGoods = rand(22) + 4; //проверяем свободное место (при этом должно вмещаться по меньшей мере 100 единиц выбранного груза if (GetSquadronFreeSpace(pchar, iTradeGoods) < 100) { dialog.snd = "Voice\ARMA\ARMA047"; dialog.text = DLG_TEXT[191]; link.l1 = DLG_TEXT[192]; link.l1.go = "exit"; } else { int iQuantityGoods = GetSquadronFreeSpace(pchar, iTradeGoods) - 20; int iMoney = ((iQuantityGoods *10+99)/100)*100; int iDaysExpired = 30; pchar.quest.iTradeGoods = iTradeGoods; pchar.quest.iQuantityGoods = iQuantityGoods; pchar.quest.iMoney = iMoney; pchar.quest.iTradeNation = iTradeNation; string sNation; switch (iTradeNation) { case FRANCE: sNation = FRA_COLONY; break; case SPAIN: sNation = SPA_COLONY; break; case HOLLAND: sNation = HOL_COLONY; break; case PORTUGAL: sNation = POR_COLONY; break; case ENGLAND: int iColony = rand(2); if (iColony == 2 && CheckAttribute(Pchar, "Quest.Story_OxbayCaptured")) { iColony = rand(1); } switch (iColony) { case 0: sNation = RED_COLONY; pchar.quest.iTradeColony = "Redmond_store"; break; case 1: sNation = GREEN_COLONY; pchar.quest.iTradeColony = "Greenford_store"; break; case 2: sNation = OX_COLONY; pchar.quest.iTradeColony = "Oxbay_store"; break; } break; } dialog.snd = "Voice\ARMA\ARMA048"; dialog.text = DLG_TEXT[193] + sNation + DLG_TEXT[194] + pchar.quest.iMoney + DLG_TEXT[195]; link.l1 = DLG_TEXT[196]; link.l1.go = "exit_trade"; link.l2 = DLG_TEXT[197]; link.l2.go = "exit"; } } } } else { dialog.snd = "Voice\ARMA\ARMA049"; dialog.text = DLG_TEXT[198]; link.l1 = DLG_TEXT[199]; link.l1.go = "exit"; } break; case "exit_trade": AddDialogExitQuest("trade_quest_open"); NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; case "generate_quest_2": if (CheckQuestAttribute("generate_trade_quest_progress", "failed")) { dialog.snd = "Voice\ARMA\ARMA050"; dialog.text = DLG_TEXT[200]; link.l1 = DLG_TEXT[201]; link.l1.go = "exit"; ChangeCharacterReputation(pchar, -1); } else { dialog.snd = "Voice\ARMA\ARMA051"; dialog.text = DLG_TEXT[202]; link.l1 = DLG_TEXT[203]; link.l1.go = "exit"; ChangeCharacterReputation(pchar, 1); AddPartyExp(pchar, (makeint(pchar.quest.iMoney)/2)); AddMoneyToCharacter(pchar, makeint(pchar.quest.iMoney)); pchar.quest.generate_trade_quest_progress = ""; pchar.quest.generate_trade_quest.over = "yes"; RemoveCharacterGoods(pchar, makeint(pchar.quest.iTradeGoods), makeint(pchar.quest.iQuantityGoods)); } AddDialogExitQuest("close_trade_quest"); break; case "no_quests": if (npchar.quest_begin == "0") { dialog.snd = "Voice\ARMA\ARMA052"; dialog.text = DLG_TEXT[204]; link.l1 = DLG_TEXT[205]; link.l1.go = "exit"; } else { dialog.snd = "Voice\ARMA\ARMA053"; dialog.text = DLG_TEXT[206]; link.l1 = DLG_TEXT[207]; link.l1.go = "exit"; } break; case "redmond_not_done": dialog.snd = "Voice\ARMA\ARMA054"; dialog.text = DLG_TEXT[208] + Characters[GetCharacterIndex(DLG_TEXT[209])].name + DLG_TEXT[210]; link.l1 = DLG_TEXT[211]; link.l1.go = "redmond_not_done_2"; ChangeCharacterReputation(pchar, -1); break; case "redmond_not_done_1": dialog.snd = "Voice\ARMA\ARMA055"; dialog.text = DLG_TEXT[212] + characters[GetCharacterIndex(DLG_TEXT[213])].name + DLG_TEXT[214]; link.l1 = DLG_TEXT[215]; link.l1.go = "redmond_not_done_2"; break; case "redmond_not_done_2": dialog.snd = "Voice\ARMA\ARMA056"; dialog.text = DLG_TEXT[216]; link.l1 = DLG_TEXT[217]; link.l1.go = "redmond_not_done_3"; if (makeint(pchar.money) >= 1500) { link.l2 = DLG_TEXT[218]; link.l2.go = "redmond_not_done_4"; } break; case "redmond_not_done_3": dialog.snd = "Voice\ARMA\ARMA057"; dialog.text = DLG_TEXT[219]; link.l1 = DLG_TEXT[220]; link.l1.go = "exit"; ChangeCharacterReputation(pchar, -10); break; case "redmond_not_done_4": dialog.snd = "Voice\ARMA\ARMA058"; dialog.text = DLG_TEXT[221]; link.l1 = DLG_TEXT[222] + Address_Form.Fra + DLG_TEXT[223]; link.l1.go = "exit"; AddMoneyToCharacter(pchar, -1500); break; case "node_1": if (GetSquadronFreeSpace(pchar, GOOD_CHOCOLATE) >= 100) { dialog.snd = "Voice\ARMA\ARMA059"; dialog.text = DLG_TEXT[224]; link.l1 = DLG_TEXT[225]; link.l1.go = "war"; link.l2 = DLG_TEXT[226] + Address_Form.Fra + DLG_TEXT[227]; link.l2.go = "access"; } else { dialog.snd = "Voice\ARMA\ARMA060"; dialog.text = DLG_TEXT[228]; link.l1 = DLG_TEXT[229]; link.l1.go = "exit"; npchar.money.quest = "0"; } break; case "war": dialog.snd = "Voice\ARMA\ARMA061"; dialog.text = DLG_TEXT[230]; link.l1 = DLG_TEXT[231]; link.l1.go = "access"; link.l2 = DLG_TEXT[232]; link.l2.go = "war_1"; break; case "war_1": if (makeint(pchar.skill.commerce) > 5) { dialog.snd = "Voice\ARMA\ARMA062"; dialog.text = DLG_TEXT[233]; link.l1 = DLG_TEXT[234]; link.l1.go = "access_1"; } else { dialog.snd = "Voice\ARMA\ARMA063"; dialog.text = DLG_TEXT[235]; link.l1 = DLG_TEXT[236]; link.l1.go = "access"; link.l2 = DLG_TEXT[237]; link.l2.go = "exit"; } break; case "access": dialog.snd = "Voice\ARMA\ARMA064"; dialog.text = DLG_TEXT[238] + npchar.name + " " + npchar.lastname + DLG_TEXT[239]; link.l1 = DLG_TEXT[240] + pchar.name + " " + pchar.lastname + DLG_TEXT[241]; link.l1.go = "to_redmond_1"; npchar.money.quest = "600"; break; case "access_1": dialog.snd = "Voice\ARMA\ARMA065"; dialog.text = DLG_TEXT[242] + npchar.name + " " + npchar.lastname + DLG_TEXT[243]; link.l1 = DLG_TEXT[244] + pchar.name + " " + pchar.lastname + DLG_TEXT[245]; link.l1.go = "to_redmond_1"; npchar.money.quest = "800"; break; case "to_redmond_1": dialog.snd = "Voice\ARMA\ARMA066"; dialog.text = DLG_TEXT[246]; link.l1 = DLG_TEXT[247]; link.l1.go = "exit"; npchar.quest.to_redmond_1 = "1"; npchar.quest_begin = "1"; AddCharacterGoods(pchar, GOOD_CHOCOLATE, 100); break; case "market": dialog.snd = "Voice\ARMA\ARMA067"; dialog.Text = DLG_TEXT[248]; Link.l1 = DLG_TEXT[249]; Link.l1.go = "trade_1"; Link.l2 = DLG_TEXT[250]; Link.l2.go = "items"; Link.l3 = DLG_TEXT[251]; Link.l3.go = "exit"; break; case "trade_1": NextDiag.CurrentNode = NextDiag.TempNode; //NPChar.quest.meeting = NPC_Meeting; DialogExit(); LaunchStore(FALAISE_DE_FLEUR_STORE); break; case "items": if (npchar.quest.item_date != lastspeak_date) { GiveItemToTrader(npchar); npchar.quest.item_date = lastspeak_date; } NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); LaunchItemsTrade(NPChar); break; case "redmond_done": dialog.snd = "Voice\ARMA\ARMA068"; Dialog.text = DLG_TEXT[252]; link.l1 = DLG_TEXT[253]; link.l1.go = "redmond_done_1"; break; case "redmond_done_1": dialog.snd = "Voice\ARMA\ARMA069"; Dialog.text = DLG_TEXT[254]; link.l1 = DLG_TEXT[255]; link.l1.go = "exit"; AddMoneyToCharacter(pchar, makeint(npchar.money.quest)); AddPartyExp(pchar, 700); npchar.money.quest = "0"; npchar.quest_begin = "0"; break; case "baldewyn": dialog.snd = "Voice\ARMA\ARMA070"; dialog.text = DLG_TEXT[256]; link.l1 = DLG_TEXT[257]; link.l1.go = "baldewyn_1"; break; case "baldewyn_1": dialog.snd = "Voice\ARMA\ARMA071"; dialog.text = DLG_TEXT[258] + Address_Form.Fra + DLG_TEXT[259]; link.l1 = DLG_TEXT[260]; link.l1.go = "baldewyn_2"; break; case "baldewyn_2": dialog.snd = "Voice\ARMA\ARMA072"; dialog.text = DLG_TEXT[261] + Characters[GetCharacterIndex(DLG_TEXT[262])].name + " " + Characters[GetCharacterIndex(DLG_TEXT[263])].lastname + DLG_TEXT[264]; link.l1 = DLG_TEXT[265]; link.l1.go = "baldewyn_3"; break; case "baldewyn_3": dialog.snd = "Voice\ARMA\ARMA073"; dialog.text = DLG_TEXT[266] + Address_Form.Fra + DLG_TEXT[267]; link.l1 = DLG_TEXT[268]; link.l1.go = "baldewyn_6"; npchar.quest.money = "500"; link.l2 = DLG_TEXT[269] + npchar.name + DLG_TEXT[270]; link.l2.go = "baldewyn_4"; break; case "baldewyn_4": if (makeint(pchar.skill.commerce) > 3) { dialog.snd = "Voice\ARMA\ARMA074"; dialog.text = DLG_TEXT[271]; link.l1 = DLG_TEXT[272]; link.l1.go = "baldewyn_6"; npchar.quest.money = "750"; } else { if (pchar.reputation > 50) { dialog.snd = "Voice\ARMA\ARMA075"; dialog.text = DLG_TEXT[273]; } else { dialog.snd = "Voice\ARMA\ARMA076"; dialog.text = DLG_TEXT[274]; } link.l1 = DLG_TEXT[275]; link.l1.go = "baldewyn_6"; npchar.quest.money = "500"; } link.l2 = DLG_TEXT[276]; link.l2.go = "baldewyn_5"; break; case "baldewyn_5": dialog.snd = "Voice\ARMA\ARMA077"; dialog.text = DLG_TEXT[277]; link.l1 = DLG_TEXT[278]; link.l1.go = "exit"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "arno_denied"; link.l2 = DLG_TEXT[279]; link.l2.go = "baldewyn_6"; break; case "baldewyn_6": dialog.snd = "Voice\ARMA\ARMA078"; dialog.text = DLG_TEXT[280]; link.l1 = DLG_TEXT[281]; link.l1.go = "exit"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "arno"; npchar.quest_begin = "1"; break; case "baldewyn_done": dialog.snd = "Voice\ARMA\ARMA079"; dialog.text = DLG_TEXT[282]; link.l1 = DLG_TEXT[283]; link.l1.go = "baldewyn_done_1"; link.l2 = DLG_TEXT[284]; link.l2.go = "baldewyn_done_2"; break; case "baldewyn_done_1": dialog.snd = "Voice\ARMA\ARMA080"; dialog.text = DLG_TEXT[285]; link.l1 = DLG_TEXT[286]; link.l1.go = "baldewyn_done_2"; link.l2 = DLG_TEXT[287]; link.l2.go = "exit"; break; case "baldewyn_done_2": dialog.snd = "Voice\ARMA\ARMA081"; dialog.text = DLG_TEXT[288]; link.l1 = DLG_TEXT[289]; link.l1.go = "baldewyn_bye"; link.l2 = DLG_TEXT[290]; link.l2.go = "baldewyn_done_3"; break; case "baldewyn_done_3": dialog.snd = "Voice\ARMA\ARMA082"; dialog.text = DLG_TEXT[291]; link.l1 = DLG_TEXT[292]; link.l1.go = "baldewyn_bye_2"; link.l2 = DLG_TEXT[293]; link.l2.go = "baldewyn_bye_3"; break; case "baldewyn_bye": dialog.snd = "Voice\ARMA\ARMA083"; dialog.text = DLG_TEXT[294]; link.l1 = DLG_TEXT[295] + Address_Form.Fra + DLG_TEXT[296]; link.l1.go = "exit"; link.l2 = DLG_TEXT[297]; link.l2.go = "First Time"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "done"; npchar.quest_begin = "0"; npchar.quest.money = "0"; Rumour[4].state = "active"; characters[GetCharacterIndex("Baldewyn Coffier")].location = "none"; Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; break; case "baldewyn_bye_2": dialog.snd = "Voice\ARMA\ARMA084"; dialog.text = DLG_TEXT[298]; link.l1 = DLG_TEXT[299]; link.l1.go = "exit"; link.l2 = DLG_TEXT[300]; link.l2.go = "First Time"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "done"; npchar.quest_begin = "0"; AddMoneyToCharacter(pchar, makeint(npchar.money.quest)); ChangeCharacterReputation(pchar, -1); AddPartyExp(pchar, 700); npchar.quest.money = "0"; Rumour[4].state = "active"; characters[GetCharacterIndex("Baldewyn Coffier")].location = "none"; Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; break; case "baldewyn_bye_3": if (makeint(pchar.skill.commerce) > 5) { dialog.snd = "Voice\ARMA\ARMA085"; dialog.text = DLG_TEXT[301] + makeint(npchar.quest.money) * 2 + DLG_TEXT[302]; link.l1 = DLG_TEXT[303]; link.l1.go = "exit"; link.l2 = DLG_TEXT[304]; link.l2.go = "First Time"; characters[GetCharacterIndex("Baldewyn Coffier")].quest.hire = "done"; npchar.quest_begin = "0"; AddMoneyToCharacter(pchar, makeint(npchar.money.quest)*2); ChangeCharacterReputation(pchar, -1); AddPartyExp(pchar, 700); npchar.quest.money = "0"; Rumour[4].state = "active"; characters[GetCharacterIndex("Baldewyn Coffier")].location = "none"; Characters[GetCharacterIndex("Sabine Matton")].location = "Falaise_De_Fleur_store"; } else { dialog.snd = "Voice\ARMA\ARMA086"; dialog.text = DLG_TEXT[305]; link.l1 = DLG_TEXT[306] + Address_Form.Fra + DLG_TEXT[307]; link.l1.go = "exit"; link.l2 = DLG_TEXT[308]; link.l2.go = "baldewyn_bye_2"; } break; case "Exit": NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "voice\MIBL\MIBL001"; Dialog.Text = DLG_TEXT[0] + Address_Form.Fra + DLG_TEXT[1]; Link.l1 = DLG_TEXT[2] + Pchar.ship.name + DLG_TEXT[3]; Link.l1.go = "node_2"; NPChar.quest.first_talk = "1"; NextDiag.TempNode = "Second time"; break; case "node_2": Dialog.snd = "voice\MIBL\MIBL002"; Dialog.Text = DLG_TEXT[4]; Link.l1 = DLG_TEXT[5]; Link.l1.go = "node_3"; break; case "node_3": Dialog.snd = "voice\MIBL\MIBL003"; Dialog.Text = DLG_TEXT[6]; Link.l1 = DLG_TEXT[7]; Link.l1.go = "Exit"; break; case "Second Time": Dialog.snd = "voice\MIBL\MIBL004"; Dialog.text = DLG_TEXT[8] + Address_Form.Fra + DLG_TEXT[9]; if (Npchar.quest.son == "letter") { link.l1 = DLG_TEXT[10]; link.l1.go = "letter"; } else { if (Npchar.quest.son == "rescue") { link.l1 = pcharrepphrase(DLG_TEXT[11], DLG_TEXT[12]); link.l1.go = "rescue"; } else { link.l1 = DLG_TEXT[13]; link.l1.go = "exit"; } } link.l2 = DLG_TEXT[14]; link.l2.go = "exit"; break; case "letter": Dialog.snd = "voice\MIBL\MIBL005"; Dialog.text = DLG_TEXT[15]; link.l1 = DLG_TEXT[16]; link.l1.go = "exit"; pchar.experience = makeint(pchar.experience) + 50; npchar.quest.son = "letter_return"; break; case "rescue": Dialog.snd = "voice\MIBL\MIBL006"; Dialog.text = DLG_TEXT[17]; link.l1 = DLG_TEXT[18]; link.l1.go = "exit"; ChangeCharacterAddress(characterFromID("Marc Blacque"), "Falaise_de_fleur_location_01", "carpenter2"); RemovePassenger(pchar, characterFromID("Marc Blacque")); ChangeCharacterReputation(pchar, 1); AddPartyExp(pchar, 1000); npchar.quest.son = "done"; NextDiag.TempNode = "Third time"; break; case "Third time": Dialog.snd = "voice\MIBL\MIBL006"; Dialog.text = DLG_TEXT[19] + Address_Form.Fra + DLG_TEXT[20]; link.l1 = DLG_TEXT[21]; link.l1.go = "exit"; break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting, TempInfoCharacterID_1, TempInfoCharacterID_2; int DonationSize; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); switch(Dialog.CurrentNode) { case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "fight_exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "dialogs\0\009"; d.Text = DLG_TEXT[0]; Link.l1 = DLG_TEXT[1]; Link.l1.go = "Node_1"; break; case "Node_1": d.Text = DLG_TEXT[2]; Link.l1 = DLG_TEXT[3]; Link.l1.go = "Node_2"; Link.l2 = DLG_TEXT[4]; Link.l2.go = "Node_4"; break; case "Node_2": d.Text = DLG_TEXT[5]; Link.l1 = DLG_TEXT[6]; Link.l1.go = "Node_3"; Link.l2 = DLG_TEXT[7]; Link.l2.go = "Node_4"; break; case "Node_3": d.Text = DLG_TEXT[8]; Link.l1 = DLG_TEXT[9]; Link.l1.go = "Node_5"; break; case "Node_4": d.Text = DLG_TEXT[10]; Link.l1 = DLG_TEXT[11]; Link.l1.go = "Node_5"; break; case "Node_5": d.Text = DLG_TEXT[12]; Link.l1 = DLG_TEXT[13]; Link.l1.go = "exit"; AddDialogExitQuest("french_patrol_fight_exit"); break; } }
void Queue::LoadAttributes(int /*n_attrs*/, Attribute **attrs) { char *command = new char[500]; sprintf(command, GET_ATTRS, Name()); char *output; RunCommand(command, &output); delete [] command; char *s = output, *s1; char *dollar[3]; int i; for (i = 0; i < 3; i++) { if (s1 = strchr(s, ':')) *s1++ = '\0'; else if (s1 = strchr(s, '\n')) *s1++ = '\0'; dollar[i] = s; s = s1; } i = 0; attrs[i]->Value = strdup(Name()); attrs[i]->DisplayValue = strdup(Name()); i++; if (_loaded_attributes == false) { if (*dollar[2]) // It's a remote printer { #ifdef aix n_devices = 1; local_devices = new char *[1]; local_devices[0] = new char[strlen(Name()) + strlen(dollar[0]) + 2]; sprintf(local_devices[0], "%s:%s", Name(), dollar[0]); #endif is_remote = true; char *new_value = new char [strlen(MESSAGE(PrinterOnServerL)) + strlen(dollar[1]) + strlen(dollar[2])]; remote_server = strdup(dollar[1]); remote_printer = strdup(dollar[2]); sprintf(new_value, MESSAGE(PrinterOnServerL), remote_printer, remote_server); attrs[i]->Value = strdup(new_value); attrs[i]->DisplayValue = strdup(new_value); delete [] new_value; } else // It's a local printer { #ifdef aix if (strchr(dollar[0], ',')) // AIX can have multiple devices per queue { DeleteAttribute(QUEUE_DEVICE); char *device = new char [strlen(MESSAGE(DeviceNL)) + 4]; s = dollar[0]; while (s && *s) { if (s1 = strchr(s, ',')) s1++; s = s1; n_devices++; } local_devices = new char *[n_devices]; n_devices = 0; s = dollar[0]; while (s && *s) { sprintf(device, MESSAGE(DeviceNL), n_devices + 1); AddAttribute(QUEUE_DEVICE, device, NULL, NULL, OPTIONAL, NO_LIST, NULL); if (s1 = strchr(s, ',')) *s1++ = '\0'; _attributes[i]->Value = strdup(s); _attributes[i]->DisplayValue = strdup(s); local_devices[n_devices] = new char[strlen(Name()) + strlen(s)+2]; sprintf(local_devices[n_devices], "%s:%s", Name(), s); i++; s = s1; n_devices++; } delete [] device; } else #endif { #ifdef aix n_devices = 1; local_devices = new char *[1]; local_devices[0] = new char[strlen(Name()) + strlen(dollar[0]) + 2]; sprintf(local_devices[0], "%s:%s", Name(), dollar[0]); #endif attrs[i]->Value = strdup(dollar[0]); attrs[i]->DisplayValue = strdup(dollar[0]); } } _loaded_attributes = true; } delete output; }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "voice\YEKI\YEKI001"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]; link.l1.go = "exit"; if (characters[GetCharacterIndex("Father Bernard")].quest.church_help == "to_dautch") { link.l1 = DLG_TEXT[2]; link.l1.go = "church_help"; } NextDiag.TempNode = "first time"; break; case "church_help": Dialog.snd = "voice\YEKI\YEKI002"; dialog.text = DLG_TEXT[3]; link.l1 = DLG_TEXT[4]; link.l1.go = "good"; link.l2 = DLG_TEXT[5]; link.l2.go = "bad"; break; case "good": Dialog.snd = "voice\YEKI\YEKI003"; dialog.text = DLG_TEXT[6]; link.l1 = DLG_TEXT[7]; link.l1.go = "good_2"; break; case "good_2": Dialog.snd = "voice\YEKI\YEKI004"; dialog.text = DLG_TEXT[8]; link.l1 = DLG_TEXT[9]; link.l1.go = "good_3"; link.l2 = DLG_TEXT[10]; link.l2.go = "bad"; break; case "good_3": Dialog.snd = "voice\YEKI\YEKI005"; dialog.text = DLG_TEXT[11]; link.l1 = DLG_TEXT[12]; link.l1.go = "good_4"; link.l2 = DLG_TEXT[13]; link.l2.go = "bad"; break; case "good_4": Dialog.snd = "voice\YEKI\YEKI006"; dialog.text = DLG_TEXT[14]; link.l1 = DLG_TEXT[15]; link.l1.go = "good_5"; break; case "good_5": if (GetCharacterSkill(pchar, SKILL_LEADERSHIP) > 3) { Dialog.snd = "voice\YEKI\YEKI007"; dialog.text = DLG_TEXT[16]; if (makeint(pchar.money) >=2000) link.l1 = DLG_TEXT[17]; link.l1.go = "good_6"; if (makeint(pchar.rank) > 4) { link.l2 = DLG_TEXT[18]; link.l2.go = "good_7"; } } else { Dialog.snd = "voice\YEKI\YEKI008"; dialog.text = DLG_TEXT[19]; link.l1 = DLG_TEXT[20]; link.l1.go = "exit"; characters[GetCharacterIndex("Father Bernard")].quest.church_help = "dautch_denied"; AddQuestRecord("church_help", "9"); } break; case "good_6": Dialog.snd = "voice\YEKI\YEKI009"; AddMoneyToCharacter(pchar, -2000); dialog.text = DLG_TEXT[21]; link.l1 = DLG_TEXT[22]; link.l1.go = "exit"; AddQuestRecord("church_help", "10"); AddPartyExp(pchar, 900); characters[GetCharacterIndex("Father bernard")].quest.church_help = "good_dautch"; break; case "good_7": Dialog.snd = "voice\YEKI\YEKI010"; dialog.text = DLG_TEXT[23]; link.l1 = DLG_TEXT[24]; link.l1.go = "exit"; AddQuestRecord("church_help", "10"); AddPartyExp(pchar, 1200); characters[GetCharacterIndex("Father bernard")].quest.church_help = "good_dautch"; break; case "bad": Dialog.snd = "voice\YEKI\YEKI011"; dialog.text = DLG_TEXT[25]; link.l1 = DLG_TEXT[26]; link.l1.go = "bad_2"; break; case "bad_2": Dialog.snd = "voice\YEKI\YEKI012"; dialog.text = DLG_TEXT[27]; link.l1 = DLG_TEXT[28]; link.l1.go = "exit"; AddDialogExitQuest("Yedam_kinne_attack"); break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // ----------------------------------- Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "dialogs\0\009"; if (npchar.quest.meeting == "0") { dialog.text = DLG_TEXT[0] + npchar.name + " " + npchar.middlename + " " + npchar.lastname + DLG_TEXT[1] + address_form.spa + DLG_TEXT[2]; Link.l1 = DLG_TEXT[3] + pchar.name + " " + pchar.lastname + DLG_TEXT[4]; Link.l1.go = "node_1"; npchar.quest.meeting = "1"; } else { dialog.text = DLG_TEXT[5]; link.l1 = DLG_TEXT[6]; link.l1.go = "quests"; link.l2 = DLG_TEXT[7]; link.l2.go = "exit"; } NextDiag.TempNode = "First time"; break; case "node_1": dialog.text = DLG_TEXT[8]; link.l1 = DLG_TEXT[9]; link.l1.go = "quests"; link.l2 = DLG_TEXT[10]; link.l2.go = "node_2"; break; case "node_2": dialog.text = DLG_TEXT[11]; link.l1 = DLG_TEXT[12]; link.l1.go = "exit"; break; case "quests": dialog.text = DLG_TEXT[13] + address_form.spa + DLG_TEXT[14]; if (CheckQuestAttribute("nigel_con_parri_checker", "win_win") || CheckQuestAttribute("nigel_con_parri_checker", "win")) { link.l1 = DLG_TEXT[15]; link.l1.go = "garri"; } if (!CheckAttribute(pchar, "quest.generate_kill_quest") && GetNationRelation2MainCharacter(PORTUGAL) != RELATION_ENEMY) { dialog.text = DLG_TEXT[16]; link.l1 = DLG_TEXT[17]; link.l1.go = "kill_pirate"; } if (CheckQuestAttribute("generate_kill_quest", "completed")) { dialog.text = DLG_TEXT[18]; link.l1 = DLG_TEXT[19]; link.l1.go = "kill_pirate_completed"; } link.l99 = DLG_TEXT[20]; link.l99.go = "exit"; break; case "kill_pirate": GeneratePirateQuest("Conceicao"); dialog.text = DLG_TEXT[21] + characters[GetCharacterIndex(DLG_TEXT[22])].ship.name + DLG_TEXT[23] + pchar.quest.killdestination + DLG_TEXT[24] + pchar.quest.killmoney + DLG_TEXT[25]; link.l1 = DLG_TEXT[26]; link.l1.go = "kill_pirate_agree"; link.l2 = DLG_TEXT[27]; link.l2.go = "kill_pirate_refused"; break; case "kill_pirate_agree": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("kill_pirate_agree"); break; case "kill_pirate_refused": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("kill_pirate_refused"); break; case "kill_pirate_completed": AddPartyExp(pchar, 1500); AddMoneyToCharacter(pchar, makeint(pchar.quest.killmoney)); AddDialogExitQuest("kill_pirate_refused_2"); ChangeCharacterReputation(pchar, 1); DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; pchar.quest.generate_kill_quest = "wait_timer"; break; case "garri": dialog.text = DLG_TEXT[28]; link.l1 = DLG_TEXT[29]; link.l1.go = "garri_2"; break; case "garri_2": dialog.text = DLG_TEXT[30]; link.l1 = DLG_TEXT[31]; if (CheckQuestAttribute("nigel_con_parri_checker", "win_win")) { link.l1.go = "garri_3"; } else { link.l1.go = "exit"; } AddQuestrecord("nigel", "15"); DeleteAttribute(PChar, "quest.nigel_con_parri_checker"); PChar.quest.con_parri_expired.over = "yes"; AddMoneyToCharacter(pchar, 3000); ChangeCharacterReputation(pchar, 1); AddDialogExitQuest("nigel_third_encounter"); break; case "garri_3": dialog.text = DLG_TEXT[32]; link.l1 = DLG_TEXT[33]; link.l1.go = "garri_4"; break; case "garri_4": dialog.text = DLG_TEXT[34]; link.l1 = DLG_TEXT[35]; link.l1.go = "exit"; AddMoneyToCharacter(pchar, 6000); ChangeCharacterReputation(pchar, 1); break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; case "j_day": dialog.text = Pchar.name + " " + Pchar.lastname + DLG_TEXT[36]; link.l1 = DLG_TEXT[37]; link.l1.go = "continue1"; break; case "continue1": LAi_QuestDelay("ex_dialog", 2); DialogExit(); NextDiag.CurrentNode = "j_day2"; break; case "j_day2": dialog.text = Pchar.name + " " + Pchar.lastname + DLG_TEXT[38]; link.l1 = DLG_TEXT[39]; link.l1.go = "exit"; break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting, PeaceGroup; int Nation, Sum; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "First time": Dialog.defAni = "dialog_stay2"; Dialog.defCam = "2"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; if(Pchar.quest.RelationAgentMet == "0") { Dialog.snd = "voice\REDI\REDI001"; d.Text = DLG_TEXT[0] + address_form.eng + DLG_TEXT[1]; Link.l1 = DLG_TEXT[2]; Link.l1.go = "Tutorial"; NPC_Meeting = "1"; } else { if(NPChar.quest.meeting == "0") { Dialog.snd = "voice\REDI\REDI002"; d.Text = DLG_TEXT[3]; Link.l1 = DLG_TEXT[4] + Pchar.name + DLG_TEXT[5]; Link.l1.go = "Service"; Link.l2 = DLG_TEXT[6]; Link.l2.go = "Exit"; } else { Dialog.snd = "voice\REDI\REDI003"; d.Text = DLG_TEXT[7] + Pchar.name"?" ; Link.l1 = DLG_TEXT[8]; Link.l1.go = "Service"; Link.l2 = DLG_TEXT[9]; Link.l2.go = "exit"; } } break; case "Service": Dialog.snd = "voice\REDI\REDI004"; d.Text = DLG_TEXT[10]; if(GetNationRelation2MainCharacter(ENGLAND) == RELATION_ENEMY) { Link.l1 = DLG_TEXT[11]; Link.l1.go = "England"; } if(GetNationRelation2MainCharacter(SPAIN) == RELATION_ENEMY) { Link.l2 = DLG_TEXT[12]; Link.l2.go = "Spain"; } if(GetNationRelation2MainCharacter(PORTUGAL) == RELATION_ENEMY) { Link.l3 = DLG_TEXT[13]; Link.l3.go = "Portugal"; } if(GetNationRelation2MainCharacter(HOLLAND) == RELATION_ENEMY) { Link.l4 = DLG_TEXT[14]; Link.l4.go = "Holland"; } if(GetNationRelation2MainCharacter(FRANCE) == RELATION_ENEMY) { Link.l5 = DLG_TEXT[15]; Link.l5.go = "France"; } Link.l6 = DLG_TEXT[16]; Link.l6.go = "exit"; break; case "Tutorial": Dialog.snd = "voice\REDI\REDI005"; d.Text = DLG_TEXT[17]; Link.l99 = DLG_TEXT[18]; Link.l99.go = "Tutorial_1"; break; case "Tutorial_1": Dialog.snd = "voice\REDI\REDI006"; d.Text = DLG_TEXT[19]; Link.l99 = DLG_TEXT[20]; Link.l99.go = "Tutorial_2"; break; case "Tutorial_2": Dialog.snd = "voice\REDI\REDI007"; d.Text = DLG_TEXT[21]; Link.l99 = DLG_TEXT[22]; Link.l99.go = "Tutorial_3"; break; case "Tutorial_3": Dialog.snd = "voice\REDI\REDI008"; d.Text = DLG_TEXT[23]; Link.l99 = DLG_TEXT[24]; Link.l99.go = "Tutorial_4"; break; case "Tutorial_4": Dialog.snd = "voice\REDI\REDI009"; d.Text = DLG_TEXT[25]; Link.l99 = DLG_TEXT[26]; Link.l99.go = "Service"; break; case "England": Pchar.quest.Relations.nation = ENGLAND; Pchar.quest.Relations.PeaceGroup = "ENGLAND_SOLDIERS"; Pchar.quest.Relations.sum = makeint(stf(Pchar.rank)/stf(Pchar.reputation)*20000); Dialog.snd = "voice\REDI\REDI010"; d.Text = DLG_TEXT[27] + Pchar.quest.Relations.sum + DLG_TEXT[28]; Link.l1 = DLG_TEXT[29]; if(makeint(Pchar.money) < makeint(Pchar.quest.Relations.sum)) { Link.l1.go = "No_money"; } else { Link.l1.go = "Agreed"; } Link.l2 = DLG_TEXT[30]; Link.l2.go = "exit"; break; case "Spain": Pchar.quest.Relations.nation = SPAIN; Pchar.quest.Relations.PeaceGroup = "SPAIN_SOLDIERS"; Pchar.quest.Relations.sum = makeint(stf(Pchar.rank)/stf(Pchar.reputation)*20000); Dialog.snd = "voice\REDI\REDI011"; d.Text = DLG_TEXT[31] + Pchar.quest.Relations.sum + DLG_TEXT[32]; Link.l1 = DLG_TEXT[33]; if(makeint(Pchar.money) < makeint(Pchar.quest.Relations.sum)) { Link.l1.go = "No_money"; } else { Link.l1.go = "Agreed"; } Link.l2 = DLG_TEXT[34]; Link.l2.go = "exit"; break; case "France": Pchar.quest.Relations.nation = FRANCE; Pchar.quest.Relations.PeaceGroup = "FRANCE_SOLDIERS"; Pchar.quest.Relations.sum = makeint(stf(Pchar.rank)/stf(Pchar.reputation)*20000); Dialog.snd = "voice\REDI\REDI012"; d.Text = DLG_TEXT[35] + Pchar.quest.Relations.sum + DLG_TEXT[36]; Link.l1 = DLG_TEXT[37]; if(makeint(Pchar.money) < makeint(Pchar.quest.Relations.sum)) { Link.l1.go = "No_money"; } else { Link.l1.go = "Agreed"; } Link.l2 = DLG_TEXT[38]; Link.l2.go = "exit"; break; case "Portugal": Pchar.quest.Relations.nation = PORTUGAL; Pchar.quest.Relations.PeaceGroup = "CONCEICAO_SOLDIERS"; Pchar.quest.Relations.sum = makeint(stf(Pchar.rank)/stf(Pchar.reputation)*20000); Dialog.snd = "voice\REDI\REDI013"; d.Text = DLG_TEXT[39] + Pchar.quest.Relations.sum + DLG_TEXT[40]; Link.l1 = DLG_TEXT[41]; if(makeint(Pchar.money) < makeint(Pchar.quest.Relations.sum)) { Link.l1.go = "No_money"; } else { Link.l1.go = "Agreed"; } Link.l2 = DLG_TEXT[42]; Link.l2.go = "exit"; break; case "Holland": Pchar.quest.Relations.nation = HOLLAND; Pchar.quest.Relations.PeaceGroup = "DOUWESEN_SOLDIERS"; Pchar.quest.Relations.sum = makeint(stf(Pchar.rank)/stf(Pchar.reputation)*20000); Dialog.snd = "voice\REDI\REDI014"; d.Text = DLG_TEXT[43] + Pchar.quest.Relations.sum + DLG_TEXT[44]; Link.l1 = DLG_TEXT[45]; if(makeint(Pchar.money) < makeint(Pchar.quest.Relations.sum)) { Link.l1.go = "No_money"; } else { Link.l1.go = "Agreed"; } Link.l2 = DLG_TEXT[46]; Link.l2.go = "exit"; break; case "No_Money": Dialog.snd = "voice\REDI\REDI015"; d.Text = DLG_TEXT[47]; Link.l1 = DLG_TEXT[48]; Link.l1.go = "exit"; break; case "Agreed": Dialog.snd = "voice\REDI\REDI016"; SetNationRelation2MainCharacter(makeint(Pchar.quest.Relations.nation), RELATION_FRIEND); LAi_group_SetRelation(Pchar.quest.Relations.PeaceGroup, LAI_GROUP_PLAYER, LAI_GROUP_FRIEND); AddMoneyToCharacter(PChar, -(makeint(Pchar.quest.Relations.sum))); DeleteAttribute(Pchar, "quest.Relations"); d.Text = DLG_TEXT[49]; Link.l1 = DLG_TEXT[50]; Link.l1.go = "Exit"; Link.l2 = DLG_TEXT[51]; Link.l2.go = "Service"; break; } }
/* ---------------------------------------------------------------------- TtaRemoveAttribute Removes an attribute from an element and release that attribute. Parameters: element: the element with which the attribute is associated. attribute: the attribute to be removed. document: the document to which the element belongs. ---------------------------------------------------------------------- */ void TtaRemoveAttribute (Element element, Attribute attribute, Document document) { PtrAttribute pAttr; ThotBool found; ThotBool mandatory; UserErrorCode = 0; if (element == NULL || attribute == NULL) TtaError (ERR_invalid_parameter); else if (((PtrAttribute) attribute)->AeAttrSSchema == NULL || ((PtrElement) element)->ElStructSchema == NULL) { TtaError (ERR_invalid_parameter); // should never occur pAttr = (PtrAttribute) attribute; if (pAttr == ((PtrElement) element)->ElFirstAttr) { ((PtrElement) element)->ElFirstAttr = pAttr->AeNext; FreeAttribute (pAttr); } } else { pAttr = ((PtrElement) element)->ElFirstAttr; found = FALSE; while (pAttr != NULL && !found) { if (pAttr->AeAttrNum == ((PtrAttribute) attribute)->AeAttrNum && !strcmp (pAttr->AeAttrSSchema->SsName, ((PtrAttribute) attribute)->AeAttrSSchema->SsName)) found = TRUE; if (!found) pAttr = pAttr->AeNext; } if (!found) TtaError (ERR_attribute_element_mismatch); else { (void) CanAssociateAttr ((PtrElement) element, pAttr, pAttr, &mandatory); if (!mandatory) /* We prohibit to suppress the attbibute language of an element */ /* which is the root of an abstract tree */ if (((PtrElement) element)->ElParent == NULL) if (pAttr->AeAttrNum == 1) mandatory = TRUE; if (mandatory && (LoadedDocument[document - 1])->DocCheckingMode & STR_CHECK_MASK) /* The attribute is required for this kind of element */ TtaError (ERR_mandatory_attribute); else { RemoveAttribute ((PtrElement) element, pAttr); #ifndef NODISPLAY UndisplayInheritedAttributes ((PtrElement) element, pAttr, document, TRUE); UndisplayAttribute ((PtrElement) element, (PtrAttribute) attribute, document); #endif DeleteAttribute ((PtrElement) element, pAttr); } } } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "DieMotherFucker": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "voice\SFNT\SFNT001"; Dialog.Text = DLG_TEXT[0] + Address_form.Eng + DLG_TEXT[1]; Link.l1 = DLG_TEXT[2]; Link.l1.go = "DieMotherFucker_2"; break; case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; //потасовка в таверне if (pchar.quest.main_line == "talk_in_tavern_begin") { if (pchar.id == "Danielle") { Dialog.snd = "voice\SFNT\SFNT002"; Dialog.Text = DLG_TEXT[3] + Address_form.Eng + DLG_TEXT[4]; Link.l1 = DLG_TEXT[5]; Link.l1.go = "node_2_danielle"; } else { Dialog.snd = "voice\SFNT\SFNT003"; dialog.text = DLG_TEXT[6]; link.l1 = DLG_TEXT[7]; link.l1.go = "node_2_kick"; } } //арест блейза if (pchar.quest.main_line == "fawn_death") { Dialog.snd = "voice\SFNT\SFNT004"; dialog.text = DLG_TEXT[8] + address_form.eng + DLG_TEXT[9]; link.l1 = DLG_TEXT[10]; link.l1.go = "node_3_blaze"; } if (pchar.quest.main_line == "after_soldier_kick") { Dialog.snd = "voice\SFNT\SFNT005"; dialog.text = DLG_TEXT[11]; link.l1 = DLG_TEXT[12]; link.l1.go = "exit"; AddDialogExitQuest("fighting_in_tavern"); } break; case "DieMotherFucker_2": Dialog.snd = "voice\SFNT\SFNT006"; Dialog.Text = DLG_TEXT[13] + characters[GetCharacterIndex(DLG_TEXT[14])].lastname + DLG_TEXT[15]; Link.l1 = DLG_TEXT[16]; Link.l1.go = "DieMotherFucker_3"; break; case "DieMotherFucker_3": Dialog.snd = "voice\SFNT\SFNT007"; AddDialogExitQuest("Fem_BoatswainFoundsTheClue"); Dialog.Text = DLG_TEXT[17]; Link.l1 = DLG_TEXT[18]; Link.l1.go = "exit"; break; case "node_2_kick": Dialog.snd = "voice\SFNT\SFNT008"; dialog.text = DLG_TEXT[19]; link.l1 = DLG_TEXT[20]; link.l1.go = "node_2_kick_2"; break; case "node_2_kick_2": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("kicked_by_soldier_complete"); break; case "node_3_blaze": Dialog.snd = "voice\SFNT\SFNT009"; dialog.text = DLG_TEXT[21]; link.l1 = DLG_TEXT[22]; link.l1.go = "exit_arrest"; break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; case "exit_arrest": EndQuestMovie(); DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; pchar.gun = ""; pchar.blade = ""; AddDialogExitQuest("blaze_to_prison_complete"); break; } }
int do_Q_request(ReliSock *syscall_sock,bool &may_fork) { int request_num = -1; int rval; syscall_sock->decode(); assert( syscall_sock->code(request_num) ); dprintf(D_SYSCALLS, "Got request #%d\n", request_num); switch( request_num ) { case CONDOR_InitializeConnection: { // dprintf( D_ALWAYS, "InitializeConnection()\n" ); bool authenticated = true; // Authenticate socket, if not already done by daemonCore if( !syscall_sock->triedAuthentication() ) { if( IsDebugLevel(D_SECURITY) ) { MyString methods; SecMan::getAuthenticationMethods( WRITE, &methods ); dprintf(D_SECURITY,"Calling authenticate(%s) in qmgmt_receivers\n", methods.Value()); } CondorError errstack; if( ! SecMan::authenticate_sock(syscall_sock, WRITE, &errstack) ) { // Failed to authenticate dprintf( D_ALWAYS, "SCHEDD: authentication failed: %s\n", errstack.getFullText().c_str() ); authenticated = false; } } if ( authenticated ) { InitializeConnection( syscall_sock->getOwner(), syscall_sock->getDomain() ); } else { InitializeConnection( NULL, NULL ); } return 0; } case CONDOR_InitializeReadOnlyConnection: { // dprintf( D_ALWAYS, "InitializeReadOnlyConnection()\n" ); // Since InitializeConnection() does nothing, and we need // to record the fact that this is a read-only connection, // but we have to do it in the socket (since we don't have // any other persistent data structure, and it's probably // the right place anyway), set the FQU. // // We need to record if this is a read-only connection so that // we can avoid expanding $$ in GetJobAd; simply checking if the // connection is authenticated isn't sufficient, because the // security session cache means that read-only connection could // be authenticated by a previous authenticated connection from // the same address (when using host-based security) less than // the expiration period ago. syscall_sock->setFullyQualifiedUser( "read-only" ); // same as InitializeConnection but no authenticate() InitializeConnection( NULL, NULL ); may_fork = true; return 0; } case CONDOR_SetEffectiveOwner: { MyString owner; int terrno; assert( syscall_sock->get(owner) ); assert( syscall_sock->end_of_message() ); rval = QmgmtSetEffectiveOwner( owner.Value() ); terrno = errno; syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() ); char const *fqu = syscall_sock->getFullyQualifiedUser(); dprintf(D_SYSCALLS, "\tSetEffectiveOwner\n"); dprintf(D_SYSCALLS, "\tauthenticated user = '******'\n", fqu ? fqu : ""); dprintf(D_SYSCALLS, "\trequested owner = '%s'\n", owner.Value()); dprintf(D_SYSCALLS, "\trval %d, errno %d\n", rval, terrno); return 0; } case CONDOR_NewCluster: { int terrno; assert( syscall_sock->end_of_message() );; errno = 0; rval = NewCluster( ); terrno = errno; dprintf(D_SYSCALLS, "\tNewCluster: rval = %d, errno = %d\n",rval,terrno ); if ( rval > 0 ) { dprintf( D_AUDIT, *syscall_sock, "Submitting new job %d.0\n", rval ); } syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; dprintf(D_FULLDEBUG,"schedd: NewCluster rval %d errno %d\n",rval,terrno); return 0; } case CONDOR_NewProc: { int cluster_id = -1; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->end_of_message() );; errno = 0; rval = NewProc( cluster_id ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); if ( rval > 0 ) { dprintf( D_AUDIT, *syscall_sock, "Submitting new job %d.%d\n", cluster_id, rval ); } syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; dprintf(D_FULLDEBUG,"schedd: NewProc rval %d errno %d\n",rval,terrno); return 0; } case CONDOR_DestroyProc: { int cluster_id = -1; int proc_id = -1; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->end_of_message() );; errno = 0; rval = DestroyProc( cluster_id, proc_id ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; dprintf(D_FULLDEBUG,"schedd: DestroyProc cluster %d proc %d rval %d errno %d\n",cluster_id,proc_id,rval,terrno); return 0; } case CONDOR_DestroyCluster: { int cluster_id = -1; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->end_of_message() );; errno = 0; rval = DestroyCluster( cluster_id ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; return 0; } #if 0 case CONDOR_DestroyClusterByConstraint: { char *constraint=NULL; int terrno; assert( syscall_sock->code(constraint) ); assert( syscall_sock->end_of_message() );; errno = 0; rval = DestroyClusterByConstraint( constraint ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } free( (char *)constraint ); assert( syscall_sock->end_of_message() );; return 0; } #endif case CONDOR_SetAttributeByConstraint: case CONDOR_SetAttributeByConstraint2: { char *attr_name=NULL; char *attr_value=NULL; char *constraint=NULL; int terrno; SetAttributeFlags_t flags = 0; assert( syscall_sock->code(constraint) ); dprintf( D_SYSCALLS, " constraint = %s\n",constraint); assert( syscall_sock->code(attr_value) ); assert( syscall_sock->code(attr_name) ); if( request_num == CONDOR_SetAttributeByConstraint2 ) { assert( syscall_sock->code( flags ) ); } assert( syscall_sock->end_of_message() );; if (strcmp (attr_name, ATTR_MYPROXY_PASSWORD) == 0) { errno = 0; dprintf( D_SYSCALLS, "SetAttributeByConstraint (MyProxyPassword) not supported...\n"); rval = 0; terrno = errno; } else { errno = 0; rval = SetAttributeByConstraint( constraint, attr_name, attr_value, flags ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); if ( rval == 0 ) { dprintf( D_AUDIT, *syscall_sock, "Set Attribute By Constraint %s, " "%s = %s\n", constraint, attr_name, attr_value); } } syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } free( (char *)constraint ); free( (char *)attr_value ); free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_SetAttribute: case CONDOR_SetAttribute2: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; char *attr_value=NULL; int terrno; SetAttributeFlags_t flags = 0; const char *users_username; const char *condor_username; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_value) ); assert( syscall_sock->code(attr_name) ); if( request_num == CONDOR_SetAttribute2 ) { assert( syscall_sock->code( flags ) ); } users_username = syscall_sock->getOwner(); condor_username = get_condor_username(); if (attr_name) dprintf(D_SYSCALLS,"\tattr_name = %s\n",attr_name); if (attr_value) dprintf(D_SYSCALLS,"\tattr_value = %s\n",attr_value); assert( syscall_sock->end_of_message() );; // ckireyev: // We do NOT want to include MyProxy password in the ClassAd (since it's a secret) // I'm not sure if this is the best place to do this, but.... if (attr_name && attr_value && strcmp (attr_name, ATTR_MYPROXY_PASSWORD) == 0) { errno = 0; dprintf( D_SYSCALLS, "Got MyProxyPassword, stashing...\n"); rval = SetMyProxyPassword (cluster_id, proc_id, attr_value); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); } else { errno = 0; rval = SetAttribute( cluster_id, proc_id, attr_name, attr_value, flags ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); // If we're modifying a previously-submitted job AND either // the client's username is not HTCondor's (i.e. not a // daemon) OR the client says we should log... if( (cluster_id != active_cluster_num) && (rval == 0) && ( strcmp(users_username, condor_username) || (flags & SHOULDLOG) ) ) { dprintf( D_AUDIT, *syscall_sock, "Set Attribute for job %d.%d, " "%s = %s\n", cluster_id, proc_id, attr_name, attr_value); } } free( (char *)attr_value ); free( (char *)attr_name ); if( flags & SetAttribute_NoAck ) { if( rval < 0 ) { return -1; } } else { syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() ); } return 0; } case CONDOR_SetTimerAttribute: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; int duration = 0; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); if (attr_name) dprintf(D_SYSCALLS,"\tattr_name = %s\n",attr_name); assert( syscall_sock->code(duration) ); dprintf(D_SYSCALLS,"\tduration = %d\n",duration); assert( syscall_sock->end_of_message() );; errno = 0; rval = SetTimerAttribute( cluster_id, proc_id, attr_name, duration ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); dprintf( D_AUDIT, *syscall_sock, "Set Timer Attribute for job %d.%d, " "attr_name = %s, duration = %d\n", cluster_id, proc_id, attr_name, duration); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_BeginTransaction: { int terrno; assert( syscall_sock->end_of_message() );; errno = 0; rval = 0; // BeginTransaction returns void (sigh), so always success BeginTransaction( ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_AbortTransaction: { int terrno; assert( syscall_sock->end_of_message() );; errno = 0; rval = 0; // AbortTransaction returns void (sigh), so always success AbortTransaction( ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_CommitTransactionNoFlags: case CONDOR_CommitTransaction: { int terrno; int flags; if( request_num == CONDOR_CommitTransaction ) { assert( syscall_sock->code(flags) ); } else { flags = 0; } assert( syscall_sock->end_of_message() );; errno = 0; CondorError errstack; rval = CheckTransaction( flags, & errstack ); terrno = errno; dprintf( D_SYSCALLS, "\tflags = %d, rval = %d, errno = %d\n", flags, rval, terrno ); if( rval >= 0 ) { errno = 0; CommitTransaction( flags ); // CommitTransaction() never returns on failure rval = 0; terrno = errno; dprintf( D_SYSCALLS, "\tflags = %d, rval = %d, errno = %d\n", flags, rval, terrno ); } syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); const CondorVersionInfo *vers = syscall_sock->get_peer_version(); if (vers && vers->built_since_version(8, 3, 4)) { // Send a classad, for less backwards-incompatibility. int code = 1; const char * reason = "QMGMT rejected job submission."; if( errstack.subsys() ) { code = 2; reason = errstack.message(); } ClassAd reply; reply.Assign( "ErrorCode", code ); reply.Assign( "ErrorReason", reason ); assert( putClassAd( syscall_sock, reply ) ); } } assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetAttributeFloat: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; float value = 0.0; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); assert( syscall_sock->end_of_message() );; errno = 0; if( QmgmtMayAccessAttribute( attr_name ) ) { rval = GetAttributeFloat( cluster_id, proc_id, attr_name, &value ); } else { rval = -1; } terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( syscall_sock->code(value) ); } free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetAttributeInt: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; int value = 0; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); dprintf( D_SYSCALLS, " attr_name = %s\n", attr_name ); assert( syscall_sock->end_of_message() );; errno = 0; if( QmgmtMayAccessAttribute( attr_name ) ) { rval = GetAttributeInt( cluster_id, proc_id, attr_name, &value ); } else { rval = -1; } terrno = errno; if (rval < 0) { dprintf( D_SYSCALLS, "GetAttributeInt(%d, %d, %s) not found.\n", cluster_id, proc_id, attr_name); } else { dprintf( D_SYSCALLS, " value: %d\n", value ); dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); } syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( syscall_sock->code(value) ); } free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetAttributeString: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; char *value = NULL; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); assert( syscall_sock->end_of_message() );; errno = 0; if( QmgmtMayAccessAttribute( attr_name ) ) { rval = GetAttributeStringNew( cluster_id, proc_id, attr_name, &value ); } else { rval = -1; } terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( syscall_sock->code(value) ); } free( (char *)value ); free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetAttributeExpr: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); assert( syscall_sock->end_of_message() );; char *value = NULL; errno = 0; if( QmgmtMayAccessAttribute( attr_name ) ) { rval = GetAttributeExprNew( cluster_id, proc_id, attr_name, &value ); } else { rval = -1; } terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); if ( !syscall_sock->code(rval) ) { free(value); return -1; } if( rval < 0 ) { if ( !syscall_sock->code(terrno) ) { free(value); return -1; } } if( rval >= 0 ) { if ( !syscall_sock->code(value) ) { free(value); return -1; } } free( (char *)value ); free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetDirtyAttributes: { int cluster_id = -1; int proc_id = -1; ClassAd updates; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->end_of_message() );; errno = 0; rval = GetDirtyAttributes( cluster_id, proc_id, &updates ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); if ( !syscall_sock->code(rval) ) { return -1; } if( rval < 0 ) { if ( !syscall_sock->code(terrno) ) { return -1; } } if( rval >= 0 ) { assert( putClassAd(syscall_sock, updates) ); } assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_DeleteAttribute: { int cluster_id = -1; int proc_id = -1; char *attr_name=NULL; int terrno; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->code(attr_name) ); assert( syscall_sock->end_of_message() );; errno = 0; rval = DeleteAttribute( cluster_id, proc_id, attr_name ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } free( (char *)attr_name ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetJobAd: { int cluster_id = -1; int proc_id = -1; ClassAd *ad = NULL; int terrno; bool delete_ad = false; assert( syscall_sock->code(cluster_id) ); dprintf( D_SYSCALLS, " cluster_id = %d\n", cluster_id ); assert( syscall_sock->code(proc_id) ); dprintf( D_SYSCALLS, " proc_id = %d\n", proc_id ); assert( syscall_sock->end_of_message() );; // dprintf( D_ALWAYS, "(%d.%d) isAuthenticated() = %d\n", cluster_id, proc_id, syscall_sock->isAuthenticated() ); // dprintf( D_ALWAYS, "(%d.%d) getOwner() = %s\n", cluster_id, proc_id, syscall_sock->getOwner() ); errno = 0; // Only fetch the jobad for legal values of cluster/proc if( cluster_id >= 1 ) { if( proc_id >= 0 ) { const char * fqu = syscall_sock->getFullyQualifiedUser(); if( fqu != NULL && strcmp( fqu, "read-only" ) != 0 ) { // expand $$() macros in the jobad as required by GridManager. // The GridManager depends on the fact that the following call // expands $$ and saves the expansions to disk in case of // restart. ad = GetJobAd_as_ClassAd( cluster_id, proc_id, true, true ); delete_ad = true; // note : since we expanded the ad, ad is now a deep // copy of the ad in memory, so we must delete it below. } else { ad = GetJobAd_as_ClassAd( cluster_id, proc_id, false, false ); } } else if( proc_id == -1 ) { // allow cluster ad to be queried as required by preen, but // do NOT ask to expand $$() macros in a cluster ad! ad = GetJobAd_as_ClassAd( cluster_id, proc_id, false, false ); } } terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE) ); } // If we called GetJobAd() with the third bool argument set // to True (expandedAd), it does a deep copy of the ad in the // queue in order to expand the $$() attributes. So we must // delete it. if (delete_ad) delete ad; assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetJobByConstraint: { char *constraint=NULL; ClassAd *ad; int terrno; assert( syscall_sock->code(constraint) ); assert( syscall_sock->end_of_message() );; errno = 0; ad = GetJobByConstraint_as_ClassAd( constraint ); terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE) ); } FreeJobAd(ad); free( (char *)constraint ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetNextJob: { ClassAd *ad; int initScan = 0; int terrno; assert( syscall_sock->code(initScan) ); dprintf( D_SYSCALLS, " initScan = %d\n", initScan ); assert( syscall_sock->end_of_message() );; errno = 0; ad = GetNextJob( initScan ); terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE) ); } FreeJobAd(ad); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetNextJobByConstraint: { char *constraint=NULL; ClassAd *ad; int initScan = 0; int terrno; assert( syscall_sock->code(initScan) ); dprintf( D_SYSCALLS, " initScan = %d\n", initScan ); if ( !(syscall_sock->code(constraint)) ) { if (constraint != NULL) { free(constraint); constraint = NULL; } return -1; } assert( syscall_sock->end_of_message() );; errno = 0; ad = GetNextJobByConstraint( constraint, initScan ); terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE) ); } FreeJobAd(ad); free( (char *)constraint ); assert( syscall_sock->end_of_message() );; return 0; } case CONDOR_GetNextDirtyJobByConstraint: { char *constraint=NULL; ClassAd *ad; int initScan = 0; int terrno; assert( syscall_sock->code(initScan) ); dprintf( D_SYSCALLS, " initScan = %d\n", initScan ); if ( !(syscall_sock->code(constraint)) ) { if (constraint != NULL) { free(constraint); constraint = NULL; } return -1; } assert( syscall_sock->end_of_message() ); errno = 0; ad = GetNextDirtyJobByConstraint( constraint, initScan ); terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE) ); } FreeJobAd(ad); free( (char *)constraint ); assert( syscall_sock->end_of_message() ); return 0; } case CONDOR_SendSpoolFile: { char *filename=NULL; int terrno; assert( syscall_sock->code(filename) ); assert( syscall_sock->end_of_message() );; errno = 0; rval = SendSpoolFile( filename ); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); #if 0 syscall_sock->encode(); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } assert( syscall_sock->end_of_message() );; #endif free( (char *)filename ); return 0; } case CONDOR_SendSpoolFileIfNeeded: { int terrno; ClassAd ad; assert( getClassAd(syscall_sock, ad) ); assert( syscall_sock->end_of_message() );; errno = 0; rval = SendSpoolFileIfNeeded(ad); terrno = errno; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); return 0; } case CONDOR_GetAllJobsByConstraint: { char *constraint=NULL; char *projection=NULL; ClassAd *ad; int terrno; int initScan = 1; classad::References proj; if ( !(syscall_sock->code(constraint)) ) { if (constraint != NULL) { free(constraint); constraint = NULL; } return -1; } if ( !(syscall_sock->code(projection)) ) { if (projection != NULL) { free(constraint); free(projection); projection = NULL; } return -1; } dprintf( D_SYSCALLS, " constraint = %s\n", constraint ); dprintf( D_SYSCALLS, " projection = %s\n", projection ? projection : ""); assert( syscall_sock->end_of_message() );; // if there is a projection, convert it into a set of attribute names if (projection) { StringTokenIterator list(projection); const std::string * attr; while ((attr = list.next_string())) { proj.insert(*attr); } } syscall_sock->encode(); do { errno = 0; ad = GetNextJobByConstraint( constraint, initScan ); initScan=0; // one first time through, otherwise 0 terrno = errno; rval = ad ? 0 : -1; dprintf( D_SYSCALLS, "\trval = %d, errno = %d\n", rval, terrno ); assert( syscall_sock->code(rval) ); if( rval < 0 ) { assert( syscall_sock->code(terrno) ); } if( rval >= 0 ) { assert( putClassAd(syscall_sock, *ad, PUT_CLASSAD_NO_PRIVATE, proj.empty() ? NULL : &proj) ); FreeJobAd(ad); } } while (rval >= 0); assert( syscall_sock->end_of_message() );; free( (char *)constraint ); free( (char *)projection ); return 0; } case CONDOR_CloseSocket: { assert( syscall_sock->end_of_message() );; return -1; } } /* End of switch */ return -1; } /* End of function */
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting, Item; int money; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "exit_fight": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "exit_RunFight": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "Node_1": if(NPChar.quest.meeting == "1") { d.Text = DLG_TEXT[0]; Link.l1 = DLG_TEXT[1]; Link.l1.go = "exit"; } else { dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[2], DLG_TEXT[3], DLG_TEXT[4], &dialog, dialog.snd1, dialog.snd2, dialog.snd3); Link.l1 = DLG_TEXT[5]; Link.l1.go = "Search"; Link.l2 = DLG_TEXT[6]; Link.l2.go = "Exit"; } break; case "Search": money = getDeadManMoney(); item = returnRandomDeadItem(); GiveItem2Character(Pchar, item); d.Text = DLG_TEXT[7] + money + DLG_TEXT[8] + item + DLG_TEXT[9]; Link.l1 = DLG_TEXT[10]; Link.l1.go = "exit"; break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag, NextDiag; string NPC_Meeting; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); makearef(NextDiag, NPChar.Dialog); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; if (pchar.quest.main_line == "to_rudnik" || pchar.quest.main_line == "after_library") { Dialog.snd = "voice\STBO\STBO001"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]; link.l1.go = "kick"; } else { if(NPChar.quest.meeting == "0") { Dialog.snd = "voice\STBO\STBO002"; d.Text = DLG_TEXT[2] + address_form.eng + DLG_TEXT[3] + pchar.name + " " + pchar.lastname + DLG_TEXT[4]; Link.l1 = pcharrepphrase(DLG_TEXT[5], DLG_TEXT[6]); Link.l1.go = "meeting"; NPC_Meeting = "1"; } else { Dialog.snd = "voice\STBO\STBO003"; d.Text = DLG_TEXT[7]; link.l1 = DLG_TEXT[8]; Link.l1.go = "meeting"; } } Diag.TempNode = "First Time"; break; case "kick": Dialog.snd = "voice\STBO\STBO004"; dialog.text = DLG_TEXT[9]; link.l1 = DLG_TEXT[10]; link.l1.go = "kick_2"; break; case "kick_2": Dialog.snd = "voice\STBO\STBO005"; dialog.text = DLG_TEXT[11]; link.l1 = DLG_TEXT[12]; link.l1.go = "kick_exit"; break; case "kick_exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("kicked_to_mine_complete"); break; case "Meeting": if (pchar.location.from_sea == "Redmond_shore_02") { Dialog.snd = "voice\STBO\STBO006"; dialog.text = DLG_TEXT[13] + characters[GetCharacterIndex(DLG_TEXT[14])].name + DLG_TEXT[15]; link.l1 = pcharrepphrase(DLG_TEXT[16], DLG_TEXT[17]); link.l1.go = "node_1"; } else { Dialog.snd = "voice\STBO\STBO007"; dialog.text = DLG_TEXT[18]; link.l1 = pcharrepphrase(DLG_TEXT[19], DLG_TEXT[20]); link.l1.go = "exit"; } break; case "node_1": Dialog.snd = "voice\STBO\STBO008"; dialog.text = DLG_TEXT[21]; link.l1 = DLG_TEXT[22]; link.l1.go = "exit"; AddDialogExitQuest("stephan_bonser_attack") characters[GetCharacterIndex("Thomas O'Reily")].quest.contraband = "after_fight"; break; } }
void ProcessDialogEvent() { ref NPChar, PChar, d; PChar = GetMainCharacter(); aref Link, Diag; string NPC_Meeting, TempInfoCharacterID_1, TempInfoCharacterID_2; int DonationSize; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makeref(d, Dialog); makearef(Diag, NPChar.Dialog); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "exit": Diag.CurrentNode = Diag.TempNode; NPChar.quest.meeting = NPC_Meeting; DialogExit(); break; case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "dialogs\0\009"; if(NPChar.quest.meeting == "0") { NPC_Meeting = "1"; dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(TimeGreeting() + DLG_TEXT[0] + address_form.eng + DLG_TEXT[1] + NPChar.name + " " + NPChar.lastname + DLG_TEXT[2], DLG_TEXT[3] + address_form.eng + DLG_TEXT[4] + NPChar.name + " " + NPChar.lastname + DLG_TEXT[5], DLG_TEXT[6] + NPChar.name + " " + NPChar.lastname + DLG_TEXT[7] + address_form.eng + DLG_TEXT[8], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); Link.l1 = LinkRandPhrase(DLG_TEXT[9] + Pchar.name + " " + Pchar.lastname + DLG_TEXT[10] + PChar.Ship.name + DLG_TEXT[11], DLG_TEXT[12] + Pchar.name + " " + Pchar.lastname + DLG_TEXT[13], DLG_TEXT[14] + PChar.name + DLG_TEXT[15]); Link.l1.go = "meeting"; } else { dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[16] + PChar.name + DLG_TEXT[17], DLG_TEXT[18] + TimeGreeting() + DLG_TEXT[19], DLG_TEXT[20] + address_form.eng + " " + Pchar.name + DLG_TEXT[21], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); if(Rand(1)==0) { Link.l1 = LinkRandPhrase(DLG_TEXT[22], DLG_TEXT[23], DLG_TEXT[24]); Link.l1.go = "rumours"; } else { Link.l1 = LinkRandPhrase(DLG_TEXT[25], DLG_TEXT[26], DLG_TEXT[27]); Link.l1.go = "town"; } if(Rand(1)==0) { Link.l2 = LinkRandPhrase(DLG_TEXT[28], DLG_TEXT[29], DLG_TEXT[30]); Link.l2.go = "info"; } else { Link.l2 = LinkRandPhrase(DLG_TEXT[31], DLG_TEXT[32], DLG_TEXT[33]); Link.l2.go = "colony"; } Link.l3 = DLG_TEXT[34]; Link.l3.go = "exit"; } break; case "Meeting": dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[35], DLG_TEXT[36] + address_form.eng + " " + PChar.name + DLG_TEXT[37], DLG_TEXT[38], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); if(Rand(1)==0) { Link.l1 = LinkRandPhrase(DLG_TEXT[39], DLG_TEXT[40], DLG_TEXT[41]); Link.l1.go = "rumours"; } else { Link.l1 = LinkRandPhrase(DLG_TEXT[42], DLG_TEXT[43], DLG_TEXT[44]); Link.l1.go = "town"; } if(Rand(1)==0) { Link.l2 = LinkRandPhrase(DLG_TEXT[45], DLG_TEXT[46], DLG_TEXT[47]); Link.l2.go = "info"; } else { Link.l2 = LinkRandPhrase(DLG_TEXT[48], DLG_TEXT[49], DLG_TEXT[50]); Link.l2.go = "colony"; } Link.l3 = DLG_TEXT[51]; Link.l3.go = "exit"; break; case "rumours": d.Text = SelectRumour(); Link.l1 = DLG_TEXT[52]; Link.l1.go = "new question"; Link.l2 = DLG_TEXT[53]; Link.l2.go = "exit"; break; case "new question": dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[54] + address_form.eng + DLG_TEXT[55], DLG_TEXT[56] + address_form.eng + DLG_TEXT[57], DLG_TEXT[58] + address_form.eng + DLG_TEXT[59], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); if(Rand(1)==0) { Link.l1 = LinkRandPhrase(DLG_TEXT[60], DLG_TEXT[61], DLG_TEXT[62]); Link.l1.go = "rumours"; } else { Link.l1 = LinkRandPhrase(DLG_TEXT[63], DLG_TEXT[64], DLG_TEXT[65]); Link.l1.go = "town"; } if(Rand(1)==0) { Link.l2 = LinkRandPhrase(DLG_TEXT[66], DLG_TEXT[67], DLG_TEXT[68]); Link.l2.go = "info"; } else { Link.l2 = LinkRandPhrase(DLG_TEXT[69], DLG_TEXT[70], DLG_TEXT[71]); Link.l2.go = "colony"; } Link.l3 = DLG_TEXT[72]; Link.l3.go = "exit"; break; case "info": dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[73] + address_form.eng + DLG_TEXT[74], DLG_TEXT[75] + address_form.eng + DLG_TEXT[76], DLG_TEXT[77] + address_form.eng + DLG_TEXT[78], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); if(Rand(1)==0) { Link.l1 = DLG_TEXT[79]; Link.l1.go = "governor"; } else { Link.l1 = DLG_TEXT[80]; Link.l1.go = "tavernkeeper"; } if(Rand(1)==0) { Link.l2 = DLG_TEXT[81]; Link.l2.go = "shipwright"; } else { Link.l2 = DLG_TEXT[82]; Link.l2.go = "localtrader"; } Link.l3 = DLG_TEXT[83]; Link.l3.go = "new question"; break; case "governor": d.Text = DLG_TEXT[84]; Link.l1 = DLG_TEXT[85]; Link.l1.go = "new question"; Link.l2 = DLG_TEXT[86]; Link.l2.go = "exit"; break; case "tavernkeeper": d.Text = DLG_TEXT[87]; Link.l1 = DLG_TEXT[88]; Link.l1.go = "new question"; Link.l2 = DLG_TEXT[89]; Link.l2.go = "exit"; break; case "shipwright": d.Text = DLG_TEXT[90]; Link.l1 = DLG_TEXT[91]; Link.l1.go = "new question"; Link.l2 = DLG_TEXT[92]; Link.l2.go = "exit"; break; case "localtrader": d.Text = DLG_TEXT[93]; Link.l1 = DLG_TEXT[94]; Link.l1.go = "new question"; Link.l2 = DLG_TEXT[95]; Link.l2.go = "exit"; break; case "town": dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[96], DLG_TEXT[97] + Address_Form.eng + DLG_TEXT[98], DLG_TEXT[99] + Address_Form.eng + DLG_TEXT[100], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); Link.l1 = DLG_TEXT[101]; Link.l1.go = "town_tavern"; Link.l2 = DLG_TEXT[102]; Link.l2.go = "town_shipyard"; Link.l3 = DLG_TEXT[103]; Link.l3.go = "town_store"; break; case "town_tavern": d.Text = DLG_TEXT[104]; Link.l1 = DLG_TEXT[105]; Link.l1.go = "exit"; Link.l2 = DLG_TEXT[106]; Link.l2.go = "town_shipyard"; Link.l3 = DLG_TEXT[107]; Link.l3.go = "town_store"; break; case "town_shipyard": d.Text = DLG_TEXT[108] + Address_Form.Eng + DLG_TEXT[109] + Address_Form.Eng + DLG_TEXT[110]; Link.l1 = DLG_TEXT[111]; Link.l1.go = "town_tavern"; Link.l2 = DLG_TEXT[112]; Link.l2.go = "town_store"; Link.l3 = DLG_TEXT[113]; Link.l3.go = "exit"; break; case "town_store": d.Text = DLG_TEXT[114] + Address_Form.Eng + DLG_TEXT[115]; Link.l1 = DLG_TEXT[116]; Link.l1.go = "town_shipyard"; Link.l2 = DLG_TEXT[117]; Link.l2.go = "town_tavern"; Link.l3 = DLG_TEXT[118]; Link.l3.go = "exit"; break; case "colony": dialog.snd1 = ""; dialog.snd2 = ""; dialog.snd3 = ""; d.Text = RandPhrase(DLG_TEXT[119], DLG_TEXT[120], DLG_TEXT[121], &Dialog, dialog.snd1, dialog.snd2, dialog.snd3); if(Rand(1)== 0) { Link.l1 = DLG_TEXT[122]; Link.l1.go = "Redmond"; } else { Link.l1 = DLG_TEXT[123]; Link.l1.go = "island"; } if(Rand(1)== 0) { Link.l1 = DLG_TEXT[124]; Link.l1.go = "fort"; } /* else { Link.l1 = "С кем торгуют местные торговцы?"; Link.l1.go = "trade"; }*/ Link.l2 = DLG_TEXT[125]; Link.l2.go = "new question"; break; case "Redmond": d.Text = DLG_TEXT[126]; Link.l1 = DLG_TEXT[127]; Link.l1.go = "Redmond_1"; Link.l2 = DLG_TEXT[128]; Link.l2.go = "new question"; break; case "Redmond_1": d.Text = DLG_TEXT[129]; //Link.l1 = "Дальше..."; //Link.l1.go = "Redmond_2"; Link.l2 = DLG_TEXT[130]; Link.l2.go = "new question"; break; case "island": switch(Rand(2)) { case 0: d.Text = DLG_TEXT[131]; Link.l1 = DLG_TEXT[132]; Link.l1.go = "colony"; break; case 1: d.Text = DLG_TEXT[133]; Link.l1 = DLG_TEXT[134]; Link.l1.go = "colony"; break; case 2: d.Text = DLG_TEXT[135]; Link.l1 = DLG_TEXT[136]; Link.l1.go = "colony"; break; } Link.l2 = DLG_TEXT[137]; Link.l2.go = "new question"; break; case "fort": switch(Rand(2)) { case 0: d.Text = DLG_TEXT[138]; Link.l1 = DLG_TEXT[139]; Link.l1.go = "colony"; break; case 1: d.Text = DLG_TEXT[140]; Link.l1 = DLG_TEXT[141]; Link.l1.go = "colony"; break; case 2: d.Text = DLG_TEXT[142]; Link.l1 = DLG_TEXT[143]; Link.l1.go = "colony"; break; } Link.l2 = DLG_TEXT[144]; Link.l2.go = "new question"; break; } }
void update_job_status( struct rusage *localp, struct rusage *remotep ) { int status = -1; double utime = 0.0; double stime = 0.0; int tot_sus=0, cum_sus=0, last_sus=0; char buf[1024*50]; // If the job completed, and there is no HISTORY file specified, // the don't bother to update the job ClassAd since it is about to be // flushed into the bit bucket by the schedd anyway. char *myHistoryFile = param("HISTORY"); if ((Proc->status == COMPLETED) && (myHistoryFile==NULL)) { return; } if (myHistoryFile) { free(myHistoryFile); } if (!JobAd) { EXCEPT( "update_job_status(): No job ad"); } JobAd->LookupInteger(ATTR_TOTAL_SUSPENSIONS, tot_sus); JobAd->LookupInteger(ATTR_CUMULATIVE_SUSPENSION_TIME, cum_sus); JobAd->LookupInteger(ATTR_LAST_SUSPENSION_TIME, last_sus); //new syntax, can use filesystem to authenticate if (!ConnectQ(schedd, SHADOW_QMGMT_TIMEOUT) || GetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_STATUS, &status) < 0) { EXCEPT("Failed to connect to schedd!"); } job_report_update_queue( Proc ); if( status == REMOVED ) { dprintf( D_ALWAYS, "update_job_status(): Job %d.%d has been removed " "by condor_rm\n", Proc->id.cluster, Proc->id.proc ); } else { SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_TOTAL_SUSPENSIONS, tot_sus); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_CUMULATIVE_SUSPENSION_TIME, cum_sus); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_LAST_SUSPENSION_TIME, last_sus); update_job_rusage( localp, remotep ); Proc->image_size = ImageSize; SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_IMAGE_SIZE, ImageSize); // For standard universe. MemoryUsed==ImageSize, no need to param this one. // because imagesize is already the best measure of memory usage. SetAttribute(Proc->id.cluster, Proc->id.proc, ATTR_MEMORY_USAGE, "((ImageSize+1023)/1024)"); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_EXIT_STATUS, JobExitStatus); rusage_to_float( Proc->local_usage, &utime, &stime ); SetAttributeFloat(Proc->id.cluster, Proc->id.proc, ATTR_JOB_LOCAL_USER_CPU, utime); SetAttributeFloat(Proc->id.cluster, Proc->id.proc, ATTR_JOB_LOCAL_SYS_CPU, stime); rusage_to_float( Proc->remote_usage[0], &utime, &stime ); SetAttributeFloat(Proc->id.cluster, Proc->id.proc, ATTR_JOB_REMOTE_USER_CPU, utime); SetAttributeFloat(Proc->id.cluster, Proc->id.proc, ATTR_JOB_REMOTE_SYS_CPU, stime); dprintf(D_FULLDEBUG,"TIME DEBUG 3 USR remotep=%lu Proc=%lu utime=%f\n", remotep->ru_utime.tv_sec, Proc->remote_usage[0].ru_utime.tv_sec, utime); dprintf(D_FULLDEBUG,"TIME DEBUG 4 SYS remotep=%lu Proc=%lu utime=%f\n", remotep->ru_stime.tv_sec, Proc->remote_usage[0].ru_stime.tv_sec, stime); if( sock_RSC1 ) { float TotalBytesSentUpdate = TotalBytesSent + sock_RSC1->get_bytes_sent() + BytesSent; float TotalBytesRecvdUpdate = TotalBytesRecvd + sock_RSC1->get_bytes_recvd() + BytesRecvd; SetAttributeFloat( Proc->id.cluster, Proc->id.proc, ATTR_BYTES_SENT, TotalBytesSentUpdate ); SetAttributeFloat( Proc->id.cluster, Proc->id.proc, ATTR_BYTES_RECVD, TotalBytesRecvdUpdate ); float RSCBytesSentUpdate = sock_RSC1->get_bytes_sent() + RSCBytesSent; float RSCBytesRecvdUpdate = sock_RSC1->get_bytes_recvd() + RSCBytesRecvd; SetAttributeFloat( Proc->id.cluster, Proc->id.proc, ATTR_RSC_BYTES_SENT, RSCBytesSentUpdate ); SetAttributeFloat( Proc->id.cluster, Proc->id.proc, ATTR_RSC_BYTES_RECVD, RSCBytesRecvdUpdate ); } if( ExitReason == JOB_CKPTED || ExitReason == JOB_NOT_CKPTED ) { SetAttributeInt( Proc->id.cluster, Proc->id.proc, ATTR_LAST_VACATE_TIME, time(0) ); } if( ExitReason == JOB_CKPTED || LastCkptTime > LastRestartTime ) { int uncommitted_suspension_time = 0; JobAd->LookupInteger(ATTR_UNCOMMITTED_SUSPENSION_TIME, uncommitted_suspension_time); if( uncommitted_suspension_time > 0 ) { int committed_suspension_time = 0; GetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_COMMITTED_SUSPENSION_TIME, &committed_suspension_time); committed_suspension_time += uncommitted_suspension_time; SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_COMMITTED_SUSPENSION_TIME, committed_suspension_time); } } // if we had checkpointed, then save all of these attributes as well. if (LastCkptTime > LastRestartTime) { SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_LAST_CKPT_TIME, LastCkptTime); CommittedTime=0; GetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_COMMITTED_TIME, &CommittedTime); CommittedTime += LastCkptTime - LastRestartTime; SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_COMMITTED_TIME, CommittedTime); LastRestartTime = LastCkptTime; SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_NUM_CKPTS, NumCkpts); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_NUM_RESTARTS, NumRestarts); if (Executing_Arch) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_CKPT_ARCH, Executing_Arch); } if (Executing_OpSys) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_CKPT_OPSYS, Executing_OpSys); } // If we wrote a checkpoint, store the location in the // LastCkptServer attribute. If we didn't use a checkpoint // server (i.e., we stored it locally), then make sure // no LastCkptServer attribute is set. if (LastCkptServer) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_LAST_CKPT_SERVER, LastCkptServer); } else { DeleteAttribute(Proc->id.cluster, Proc->id.proc, ATTR_LAST_CKPT_SERVER); } if (LastCkptPlatform) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_LAST_CHECKPOINT_PLATFORM, LastCkptPlatform); } } // if the job completed, we should include the run-time in // committed time, since it contributed to the completion of // the job. Also, commit the exit code/signal stuff, plus any // core filenames. if (Proc->status == COMPLETED) { int exit_code, exit_signal, exit_by_signal; int pending; // update the time. CommittedTime = 0; GetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_COMMITTED_TIME, &CommittedTime); CommittedTime += Proc->completion_date - LastRestartTime; SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_JOB_COMMITTED_TIME, CommittedTime); // if there is a core file, update that too. if (JobAd->LookupString(ATTR_JOB_CORE_FILENAME, buf, sizeof(buf))) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_JOB_CORE_FILENAME, buf); } // only new style ads have ATTR_ON_EXIT_BY_SIGNAL, so only // SetAttribute for those types of ads if (JobAd->LookupInteger(ATTR_ON_EXIT_BY_SIGNAL, exit_by_signal)==1) { SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_ON_EXIT_BY_SIGNAL, exit_by_signal); if (exit_by_signal == 1) /* exited via signal */ { JobAd->LookupInteger(ATTR_ON_EXIT_SIGNAL, exit_signal); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_ON_EXIT_SIGNAL, exit_signal); } else { JobAd->LookupInteger(ATTR_ON_EXIT_CODE, exit_code); SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_ON_EXIT_CODE, exit_code); } } // and now, let's try and mark this job as a terminate pending // job. If the job already is, then fine. We'll mark it again. if (JobAd->LookupBool(ATTR_TERMINATION_PENDING, pending)) { SetAttribute(Proc->id.cluster, Proc->id.proc, ATTR_TERMINATION_PENDING, pending?"TRUE":"FALSE"); } else { // if it isn't in the job ad, then add it to the saved ad in the // schedd. SetAttribute(Proc->id.cluster, Proc->id.proc, ATTR_TERMINATION_PENDING, "TRUE"); } // store the reason why the job is marked completed. if (JobAd->LookupString(ATTR_TERMINATION_REASON, buf, sizeof(buf))) { SetAttributeString(Proc->id.cluster, Proc->id.proc, ATTR_TERMINATION_REASON, buf); } // Set up the exit code the shadow was about to exit with to // help support the terminate pending "state". SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_TERMINATION_EXITREASON, ExitReason); // Put the job status as created by waitpid() into the job ad // itself. This is to implement the terminate_pending feature. It // is done like this because EVERYWHERE in this codebase we do // stuff like WIFEXITED(JobStatus) and it turns out there are no // user level macros to will one of those status values as returned // by waitpid() into existance. So, we'll put it directly into the // job ad to prevent me having to reimplement a few large functions // which deal with JobStatus directly--as it is sadly a global // variable. SetAttributeInt(Proc->id.cluster, Proc->id.proc, ATTR_WAITPID_STATUS, JobStatus); } } if (!DisconnectQ(0)) { EXCEPT("Failed to commit updated job queue status!"); } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; dialog.snd = "Voice\DASA\DASA001"; Dialog.Text = DLG_TEXT[0]; Link.l1 = DLG_TEXT[1]; Link.l1.go = "node_2"; if (pchar.quest.main_line == "blaze_to_incas_collection_begin_6" || pchar.quest.main_line == "blaze_to_incas_collection_begin") { dialog.snd = "Voice\DASA\DASA002"; dialog.text = DLG_TEXT[2]; link.l1 = DLG_TEXT[3]; link.l1.go = "exit_to_ship"; link.l2 = DLG_TEXT[4]; link.l2.go = "exit"; } //if (pchar.quest.main_line == "kill_pirate_06") //trace ("characters[GetCharacterIndex(Pirate Captain 06)].act.hp" + characters[GetCharacterIndex(Pirate Captain 06)].act.hp); if (pchar.quest.main_line == "kill_pirate_06") { dialog.snd = "Voice\DASA\DASA003"; dialog.text = DLG_TEXT[5]; link.l1 = DLG_TEXT[6]; link.l1.go = "wait_two_days"; } if (pchar.quest.main_line == "blaze_to_incas_collection_begin_7") { dialog.snd = "Voice\DASA\DASA004"; dialog.text = DLG_TEXT[7]; link.l1 = DLG_TEXT[8]; link.l1.go = "statuets_exit"; } NPChar.quest.first_talk = "1"; NextDiag.TempNode = "first time"; break; case "statuets_exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("danielle_sailor_statuets_exit"); break; case "wait_two_days": AddDialogExitQuest("find_statuets_complete"); DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; case "node_2": dialog.snd = "Voice\DASA\DASA005"; Dialog.Text = DLG_TEXT[9]; Link.l1 = DLG_TEXT[10]; Link.l1.go = "exit"; SetQuestHeader("Talk_with_Ralph_Fawn_in_quest_tavern"); AddQuestRecord("Talk_with_Ralph_Fawn_in_quest_tavern", "1"); ChangeCharacterAddressGroup(&characters[GetCharacterIndex("Blaze")], "Quest_redmond_tavern", "goto", "goto2"); ChangeCharacterAddressGroup(&characters[GetCharacterIndex("Ralph Fawn")], "Quest_redmond_tavern", "goto", "goto3"); break; case "exit_to_ship": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; AddDialogExitQuest("exit_to_ship"); break; case "Exit": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; break; } }
void ProcessDialogEvent() { ref NPChar; DeleteAttribute(&Dialog,"Links"); aref Link, NextDiag; makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); int iTest; ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; if (npchar.quest.meeting == "0") { Dialog.snd = "voice\ZAMU\ZAMU001"; Dialog.Text = TimeGreeting() + DLG_TEXT[0] + Address_form.Spa + DLG_TEXT[1]; } else { Dialog.snd = "voice\ZAMU\ZAMU002"; Dialog.Text = TimeGreeting() + DLG_TEXT[2] + pchar.name + DLG_TEXT[3]; } Link.l1 = pcharrepphrase(DLG_TEXT[4], DLG_TEXT[5]); if (npchar.quest.meeting == "0") { Link.l1.go = "node_1"; } else { Link.l1.go = "node_4"; } link.l2 = pcharrepphrase(DLG_TEXT[6], DLG_TEXT[7]); link.l2.go = "exit"; NextDiag.TempNode = "First time"; break; case "node_1": Dialog.snd = "voice\ZAMU\ZAMU003"; dialog.text = DLG_TEXT[8]; link.l1 = pcharrepphrase(DLG_TEXT[9] + pchar.name + DLG_TEXT[10] + pchar.ship.name + DLG_TEXT[11], DLG_TEXT[12] + pchar.name + DLG_TEXT[13] + pchar.ship.name + DLG_TEXT[14]); link.l1.go = "node_2"; link.l2 = pcharrepphrase(DLG_TEXT[15], DLG_TEXT[16]); link.l2.go = "exit"; break; case "node_2": Dialog.snd = "voice\ZAMU\ZAMU004"; dialog.text = DLG_TEXT[17]; link.l1 = pcharrepphrase(DLG_TEXT[18], DLG_TEXT[19]); link.l1.go = "node_3"; npchar.quest.meeting = "1"; break; case "node_3": Dialog.snd = "voice\ZAMU\ZAMU005"; dialog.text = DLG_TEXT[20] + npchar.name + " " + npchar.lastname + DLG_TEXT[21]; link.l1 = pcharrepphrase(DLG_TEXT[22] + npchar.name + DLG_TEXT[23], DLG_TEXT[24]); link.l1.go = "node_4"; link.l2 = pcharrepphrase(DLG_TEXT[25], DLG_TEXT[26]); link.l2.go = "exit"; break; case "node_4": Dialog.snd = "voice\ZAMU\ZAMU006"; dialog.text = DLG_TEXT[27]; link.l1 = DLG_TEXT[28]; link.l1.go = "rumours"; link.l2 = DLG_TEXT[29]; link.l2.go = "quests"; break; case "rumours": if (characters[GetCharacterIndex("Clair Larrouse")].quest.goldmine == "0") { Dialog.snd = "voice\ZAMU\ZAMU007"; dialog.text = DLG_TEXT[30] + Characters[GetCharacterIndex(DLG_TEXT[31])].name + " " + Characters[GetCharacterIndex(DLG_TEXT[32])].lastname + DLG_TEXT[33]; link.l1 = DLG_TEXT[34]; link.l1.go = "clair_1"; link.l2 = DLG_TEXT[35]; link.l2.go = "quests"; link.l3 = DLG_TEXT[36]; link.l3.go = "exit"; } else { dialog.text = SelectRumour(); link.l1 = pcharrepphrase(DLG_TEXT[37], DLG_TEXT[38]); link.l1.go = "exit"; link.l2 = pcharrepphrase(DLG_TEXT[39], DLG_TEXT[40] + npchar.name + DLG_TEXT[41]); link.l2.go = "quests"; } break; case "clair_1": Dialog.snd = "voice\ZAMU\ZAMU008"; dialog.text = DLG_TEXT[42]; link.l1 = pcharrepphrase(DLG_TEXT[43], DLG_TEXT[44]); link.l1.go = "clair_2"; break; case "clair_2": Dialog.snd = "voice\ZAMU\ZAMU009"; dialog.text = DLG_TEXT[45]; link.l1 = pcharrepphrase(DLG_TEXT[46], DLG_TEXT[47]); link.l1.go = "quests"; link.l2 = pcharrepphrase(DLG_TEXT[48], DLG_TEXT[49]); link.l2.go = "exit"; characters[GetCharacterIndex("Clair Larrouse")].quest.goldmine = "1"; break; case "quests": iTest = 0; Dialog.snd = "voice\ZAMU\ZAMU010"; Dialog.text = DLG_TEXT[50]; ////////////////////////////// // Выдача квестов ////////////////////////////// if (npchar.quest_begin == "0") { if (characters[GetCharacterIndex("Vigila Mendes")].quest.escort == "0") { link.l1 = pcharrepphrase(DLG_TEXT[51], DLG_TEXT[52]); link.l1.go = "escort_1"; } if ((characters[GetCharacterIndex("Vigila Mendes")].quest.escort == "done")&&(npchar.quest.end_escort == "0")) { link.l1 = pcharrepphrase(DLG_TEXT[53], DLG_TEXT[54]); link.l1.go = "end_escort_1"; npchar.quest.end_escort = "done"; } if ((npchar.quest.bandits == "0")&&(npchar.quest.end_escort == "done")) { link.l1 = pcharrepphrase(DLG_TEXT[55], DLG_TEXT[56]); link.l1.go = "bandits_1"; } if (npchar.quest.bandits == "1") { link.l1 = pcharrepphrase(DLG_TEXT[57], DLG_TEXT[58]); link.l1.go = "bandits_01"; } if (npchar.quest.bandits == "2") { link.l1 = DLG_TEXT[59]; link.l1.go = "exit"; } if (npchar.quest.bandits == "3") { link.l1 = DLG_TEXT[60]; link.l1.go = "bandits_over"; } } Link.l99 = DLG_TEXT[61]; Link.l99.go = "exit"; break; case "bandits_over": Dialog.snd = "voice\ZAMU\ZAMU011"; dialog.text = DLG_TEXT[62]; link.l1 = DLG_TEXT[63]; link.l1.go = "exit"; npchar.quest.bandits = "done"; AddpartyExp(pchar, 1800); Officersreaction("good"); ChangeCharacterReputation(pchar, 2); AddMoneyToCharacter(pchar, 800); npchar.location = "none"; break; case "bandits_01": Dialog.snd = "voice\ZAMU\ZAMU012"; dialog.text = DLG_TEXT[64]; link.l1 = pcharrepphrase(DLG_TEXT[65], DLG_TEXT[66]); link.l1.go = "bandits_4"; link.l2 = pcharrepphrase(DLG_TEXT[67], DLG_TEXT[68]); link.l2.go = "exit" break; case "bandits_1": Dialog.snd = "voice\ZAMU\ZAMU013"; dialog.text = DLG_TEXT[69]; link.l1 = DLG_TEXT[70]; link.l1.go = "bandits_2"; break; case "bandits_2": Dialog.snd = "voice\ZAMU\ZAMU014"; dialog.text = DLG_TEXT[71]; link.l1 = pcharrepphrase(DLG_TEXT[72], DLG_TEXT[73]); link.l1.go = "bandits_3"; break; case "bandits_3": Dialog.snd = "voice\ZAMU\ZAMU015"; dialog.text = DLG_TEXT[74]; link.l1 = pcharrepphrase(DLG_TEXT[75], DLG_TEXT[76]); link.l1.go = "bandits_4"; link.l2 = pcharrepphrase(DLG_TEXT[77], DLG_TEXT[78]); link.l2.go = "exit"; npchar.quest.bandits = "1"; break; case "bandits_4": Dialog.snd = "voice\ZAMU\ZAMU022"; dialog.text = DLG_TEXT[79]; link.l1 = pcharrepphrase(DLG_TEXT[80], DLG_TEXT[81]); link.l1.go = "exit"; npchar.quest.bandits = "begin"; SetQuestHeader("nurro"); AddQuestrecord("murro", "1"); pchar.quest.revenge_for_bandits.win_condition.l1 = "location"; pchar.quest.revenge_for_bandits.win_condition.l1.location = "Muelle_town_exit"; pchar.quest.revenge_for_bandits.win_condition = "revenge_for_bandits_complete"; break; case "end_escort_1": Dialog.snd = "voice\ZAMU\ZAMU016"; dialog.text = DLG_TEXT[82] + address_form.spa + DLG_TEXT[83]; link.l1 = DLG_TEXT[84]; link.l1.go = "end_escort_2"; break; case "end_escort_2": Dialog.snd = "voice\ZAMU\ZAMU017"; dialog.text = DLG_TEXT[85]; link.l1 = pcharrepphrase(DLG_TEXT[86], DLG_TEXT[87]); link.l1.go = "end_escort_3"; break; case "end_escort_3": Dialog.snd = "voice\ZAMU\ZAMU018"; dialog.text = DLG_TEXT[88]; link.l1 = DLG_TEXT[89]; link.l1.go = "exit"; npchar.quest.end_escort = "done"; AddDialogExitQuest("zaid_to_muelle_town"); break; case "escort_1": Dialog.snd = "voice\ZAMU\ZAMU019"; dialog.text = DLG_TEXT[90]; link.l1 = pcharrepphrase(DLG_TEXT[91], DLG_TEXT[92]); link.l1.go = "escort_2"; break; case "escort_2": Dialog.snd = "voice\ZAMU\ZAMU020"; dialog.text = DLG_TEXT[93]; link.l1 = pcharrepphrase(DLG_TEXT[94], DLG_TEXT[95]); link.l1.go = "escort_3"; break; case "escort_3": Dialog.snd = "voice\ZAMU\ZAMU021"; dialog.text = DLG_TEXT[96]; link.l1 = pcharrepphrase(DLG_TEXT[97], DLG_TEXT[98]); link.l1.go = "exit"; characters[GetCharacterIndex("Vigila Mendes")].quest.escort = "1"; break; case "Exit": NextDiag.CurrentNode = NextDiag.TempNode; DialogExit(); break; } }
void ProcessDialogEvent() { ref NPChar; aref Link, NextDiag; DeleteAttribute(&Dialog,"Links"); makeref(NPChar,CharacterRef); makearef(Link, Dialog.Links); makearef(NextDiag, NPChar.Dialog); ref PChar; PChar = GetMainCharacter(); switch(Dialog.CurrentNode) { // -----------------------------------Диалог первый - первая встреча case "First time": Dialog.defAni = "dialog_stay1"; Dialog.defCam = "1"; Dialog.defSnd = "dialogs\0\017"; Dialog.defLinkAni = "dialog_1"; Dialog.defLinkCam = "1"; Dialog.defLinkSnd = "dialogs\woman\024"; Dialog.ani = "dialog_stay2"; Dialog.cam = "1"; Dialog.snd = "voice\PEBE\PEBE001"; dialog.text = DLG_TEXT[0]; link.l1 = DLG_TEXT[1]+ Characters[GetCharacterIndex(DLG_TEXT[2])].name +" "+ Characters[GetCharacterIndex(DLG_TEXT[3])].lastname +DLG_TEXT[4]; link.l1.go = "1"; break; case "1": Dialog.snd = "voice\PEBE\PEBE002"; dialog.text = DLG_TEXT[5]; link.l1 = DLG_TEXT[6]; link.l1.go = "2"; break; case "2": Dialog.snd = "voice\PEBE\PEBE003"; dialog.text = DLG_TEXT[7]; link.l1 = DLG_TEXT[8]; link.l1.go = "Exit_kill"; link.l2 = DLG_TEXT[9]; link.l2.go = "Exit_spare"; break; case "Exit_kill": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; ChangeCharacterReputation(pchar, -10); AddDialogExitQuest("Hit_kill_Pepin"); break; case "Exit_spare": DialogExit(); NextDiag.CurrentNode = NextDiag.TempNode; ChangeCharacterReputation(pchar, -5); AddDialogExitQuest("Hit_spare_Pepin"); break; } }